﻿
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--exec [sp_WebPlus_Skills_Reporting_ByStudent] '23/24', 2

ALTER PROCEDURE [sp_WebPlus_Skills_Reporting_ByStudent]
  @AcademicYearID   AS VARCHAR(5),
  @ShowStudentsWithAnswers AS INT
AS
--AMG 13/02/2024
--The DataSource for the main reporting page in OneGradePlus for Skills
--We need to calculate the starting point and the MostRecentPoint
--So if a student starts in period 3, that is their starting point - we can then calculate the difference between the start and end point.
--Shows the Course Answers for the Course and the Overall Student Answers.
--AMG 25/03/2024
--This now only shows one row per student.
--It shows the CrossCollege Avg, the Avg for ALL Courses and the Overall Avg for each period, the Start and End and Difference also.
--AMG 06/04/2024
--Removed unnecessary course / enrolment related NULL fields.
--AMG 17/04/2024
--Added in parameter @ShowStudentsWithAnswers (0=All, 1=Answered, 2=NotAnswered) and fixed a join to remove duplicated records
--AMG 19/04/2024
--renamed Ethnicity field to LLDDandHealthProblem.
--AMG 30/04/2024
--Added in AS StudentUserDefinedNumber, Number2, Date

--DECLARE @AcademicYearID   AS VARCHAR(5)
--SELECT @AcademicYearID = '23/24'
----Now, (for Student Cross College) we need to find the Most Recent Period and the StartingValue and the Latest Value.

SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)

AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)

AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsStudentOnlyAnswerAvg_Latestsub
FROM vSkillsStudentOnlyAnswer_AvgPivot
WHERE AcademicYearID = @AcademicYearID


--Now, (for ALL Courses) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
AcademicYearID,

	(CASE WHEN  Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE  Period10 END)
									ELSE  Period09 END)
								ELSE  Period08 END)
							ELSE  Period07 END) 
						ELSE  Period06 END)
					ELSE  Period05 END)
				ELSE  Period04 END)
			ELSE  Period03 END)
		ELSE  Period02 END)				
	ELSE  Period01 END)
 AS StartingValue,

	(CASE WHEN  Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN 
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod, 
 
  	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
 					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)
AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 10 END)
AS MostRecentPeriod
INTO #TempvSkillsCourseStudentOnlyAnswerAvg_AllCourses_Latestsub
FROM vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot
WHERE AcademicYearID = @AcademicYearID

--Now, (for Overall) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)
AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)
AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsOverallStudentAnswerAvg_Latestsub
FROM vSkillsOverallStudentAnswer_AvgPivot
WHERE AcademicYearID = @AcademicYearID


--and (for Student Cross-College) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsStudentAvg_Latest
FROM
	#TempvSkillsStudentOnlyAnswerAvg_Latestsub

--and (for ALL Courses) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	AcademicYearID,
	StartingPeriod,
	MostRecentPeriod,
	(CASE WHEN StartingValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsAllCoursesAvg_Latest
FROM
	#TempvSkillsCourseStudentOnlyAnswerAvg_AllCourses_Latestsub

--and (for Overall) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsOverallAvg_Latest
FROM
	#TempvSkillsOverallStudentAnswerAvg_Latestsub


--For the Overall Student Enrolment Status (Cross College),
		
--The Enrolment OverallCompletionID should only be based on 'Imported' records.
--Firstly Load up a series of #Temptables with a count of the completion statuses ...
--It is important that we only take the 'Imported' records - we don't want to look at adhoc records here!
SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp1 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 1 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp2 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 2 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp3 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 3 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp4 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 4 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp5 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 5 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp6 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 6 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID



SELECT 
	OGP_Student.ID AS OGP_StudentID,
	(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
		(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
			(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
				(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
					(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
					99 --Other!
					END) -- Xfer
				END)
			END)
		END)
	END) AS StudentOverallCompletionID

INTO
	#TempOverallStudentCompletion
FROM
	OGP_Student
		INNER JOIN
		(
		SELECT 
			OGP_Student.ID,
			(SELECT CountCompletion FROM #TempStudent_Comp1 WHERE #TempStudent_Comp1.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_1,
			(SELECT CountCompletion FROM #TempStudent_Comp2 WHERE #TempStudent_Comp2.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_2,
			(SELECT CountCompletion FROM #TempStudent_Comp3 WHERE #TempStudent_Comp3.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_3,
			(SELECT CountCompletion FROM #TempStudent_Comp4 WHERE #TempStudent_Comp4.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_4,
			(SELECT CountCompletion FROM #TempStudent_Comp5 WHERE #TempStudent_Comp5.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_5,
			(SELECT CountCompletion FROM #TempStudent_Comp6 WHERE #TempStudent_Comp6.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_6
		FROM
			OGP_Student	
		WHERE
			OGP_Student.AcademicYearID = @AcademicYearID
			AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

		ON t.ID = OGP_Student.ID
		 

	


SELECT

	OGP_Student.AcademicYearID, StudentRef, Forenames, Surname, 

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = OGP_Student.AcademicYearID ) + '0831' AS DateTime),
	OGP_Student.DOB
	)) AS AgeOn31Aug,
	Gender, 
	(SELECT Ethnicity.Code + ' - ' + Ethnicity.[Definition] FROM Ethnicity WHERE Ethnicity.ID = OGP_Student.EthnicityID) AS Ethnicity, 
	DOB, 

	#TempOverallStudentCompletion.StudentOverallCompletionID, 
	ISNULL((SELECT [Description] FROM Completion WHERE Completion.ID = #TempOverallStudentCompletion.StudentOverallCompletionID), 'n/a') AS CompletionStatus, 

	UserDefinedString1 AS StudentUserDefinedString1, UserDefinedString2 AS StudentUserDefinedString2, UserDefinedString3 AS StudentUserDefinedString3, UserDefinedString4 AS StudentUserDefinedString4,
	UserDefinedString5 AS StudentUserDefinedString5, UserDefinedString6 AS StudentUserDefinedString6, UserDefinedString7 AS StudentUserDefinedString7, UserDefinedString8 AS StudentUserDefinedString8,
	UserDefinedNumber AS StudentUserDefinedNumber, UserDefinedNumber2 AS StudentUserDefinedNumber2, UserDefinedDate AS StudentUserDefinedDate, 

	(SELECT LLDDandHealthProblem.Code + ' - ' + LLDDandHealthProblem.[Definition] FROM LLDDandHealthProblem WHERE LLDDandHealthProblem.ID = OGP_Student.LLDDandHealthProblemID) AS LLDDandHealthProblem, 
	OGP_Student.FreeSchoolMeal,
	
	OGP_Student.ID AS OGP_StudentID,

	 vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS CrossCollPeriod01,  vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS CrossCollPeriod02,  vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS CrossCollPeriod03, vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS CrossCollPeriod04,  vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS CrossCollPeriod05,  
	 vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS CrossCollPeriod06,  vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS CrossCollPeriod07,  vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS CrossCollPeriod08, vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS CrossCollPeriod09,  vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS CrossCollPeriod10,
	#TempvSkillsStudentAvg_Latest.Diff_Start_Latest AS CrossCollDifference,
	#TempvSkillsStudentAvg_Latest.StartingPeriod AS CrossCollStartingPeriod,
	#TempvSkillsStudentAvg_Latest.MostRecentPeriod AS CrossCollMostRecentPeriod,
	
	vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period01 AS AllCoursesPeriod01,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period02 AS AllCoursesPeriod02,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period03 AS AllCoursesPeriod03, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period04 AS AllCoursesPeriod04, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period05 AS AllCoursesPeriod05,  
	vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period06 AS AllCoursesPeriod06,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period07 AS AllCoursesPeriod07,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period08 AS AllCoursesPeriod08, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period09 AS AllCoursesPeriod09, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period10 AS AllCoursesPeriod10,
	#TempvSkillsAllCoursesAvg_Latest.Diff_Start_Latest AS AllCoursesDifference, 
	#TempvSkillsAllCoursesAvg_Latest.StartingPeriod AS AllCoursesStartingPeriod,
	#TempvSkillsAllCoursesAvg_Latest.MostRecentPeriod AS AllCoursesMostRecentPeriod,

	 vSkillsOverallStudentAnswer_AvgPivot.Period01 AS OverallPeriod01,  vSkillsOverallStudentAnswer_AvgPivot.Period02 AS OverallPeriod02,  vSkillsOverallStudentAnswer_AvgPivot.Period03 AS OverallPeriod03, vSkillsOverallStudentAnswer_AvgPivot.Period04 AS OverallPeriod04, vSkillsOverallStudentAnswer_AvgPivot.Period05 AS OverallPeriod05,  
	 vSkillsOverallStudentAnswer_AvgPivot.Period06 AS OverallPeriod06,  vSkillsOverallStudentAnswer_AvgPivot.Period07 AS OverallPeriod07,  vSkillsOverallStudentAnswer_AvgPivot.Period08 AS OverallPeriod08, vSkillsOverallStudentAnswer_AvgPivot.Period09 AS OverallPeriod09, vSkillsOverallStudentAnswer_AvgPivot.Period10 AS OverallPeriod10,
	#TempvSkillsOverallAvg_Latest.Diff_Start_Latest AS OverallDifference, 
	#TempvSkillsOverallAvg_Latest.StartingPeriod AS OverallStartingPeriod,
	#TempvSkillsOverallAvg_Latest.MostRecentPeriod AS OverallMostRecentPeriod

FROM 
	OGP_Student 
	LEFT JOIN #TempvSkillsStudentAvg_Latest ON OGP_Student.ID =  #TempvSkillsStudentAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON OGP_Student.ID = vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID
	LEFT JOIN #TempvSkillsOverallAvg_Latest ON OGP_Student.ID =  #TempvSkillsOverallAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID
	LEFT JOIN #TempvSkillsAllCoursesAvg_Latest ON OGP_Student.ID =  #TempvSkillsAllCoursesAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot ON OGP_Student.ID = vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.OGP_StudentID

	LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID
	LEFT JOIN #TempOverallStudentCompletion ON OGP_Student.ID = #TempOverallStudentCompletion.OGP_StudentID

WHERE
	OGP_Student.AcademicYearID = @AcademicYearID
	AND OGP_Student.RecordStatus <> 'Obsolete'
	AND (CASE WHEN @ShowStudentsWithAnswers = 2 THEN 2 ELSE (CASE WHEN #TempvSkillsOverallAvg_Latest.StartingPeriod IS NULL THEN 0 ELSE 1 END) END) = @ShowStudentsWithAnswers



GO

	
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--exec [sp_WebPlus_Skills_Reporting_CrossCollege_ByStudent_ByQuestion] '23/24', 4, 1

ALTER PROCEDURE [sp_WebPlus_Skills_Reporting_CrossCollege_ByStudent_ByQuestion]
  @AcademicYearID   AS VARCHAR(5),
  @QuestionID AS INT,
  @ShowStudentsWithAnswers AS INT
AS
--AMG 25/03/2024
--Only shows one row per student.
--Pass in a Question Parameter and see how it has been answered by each student in each period.
--AMG 17/04/2024
--Added in parameter @ShowStudentsWithAnswers (0=All, 1=Answered, 2=NotAnswered)
--AMG 29/04/2024
--Added in StartingPeriodValue and MostRecentPeriodValue
--AMG 30/04/2024
--Added in AS StudentUserDefinedNumber, Number2, Date

--DECLARE @AcademicYearID   AS VARCHAR(5)
--SELECT @AcademicYearID = '23/24'
----Now, (for Student Cross College) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)

AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)

AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsStudentOnlyAnswerAvg_ByQuestion_Latestsub
FROM vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot
WHERE AcademicYearID = @AcademicYearID
AND SkillsQuestionID = @QuestionID




--and (for Student Cross-College) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	MostRecentPeriodValue,
	StartingPeriodValue,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsStudentAvgByQuestion_Latest
FROM
	#TempvSkillsStudentOnlyAnswerAvg_ByQuestion_Latestsub




--For the Overall Student Enrolment Status (Cross College),
		
--The Enrolment OverallCompletionID should only be based on 'Imported' records.
--Firstly Load up a series of #Temptables with a count of the completion statuses ...
--It is important that we only take the 'Imported' records - we don't want to look at adhoc records here!
SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp1 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 1 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp2 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 2 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp3 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 3 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp4 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 4 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp5 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 5 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp6 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 6 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID



SELECT 
	OGP_Student.ID AS OGP_StudentID,
	(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
		(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
			(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
				(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
					(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
					99 --Other!
					END) -- Xfer
				END)
			END)
		END)
	END) AS StudentOverallCompletionID

INTO
	#TempOverallStudentCompletion
FROM
	OGP_Student
		INNER JOIN
		(
		SELECT 
			OGP_Student.ID,
			(SELECT CountCompletion FROM #TempStudent_Comp1 WHERE #TempStudent_Comp1.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_1,
			(SELECT CountCompletion FROM #TempStudent_Comp2 WHERE #TempStudent_Comp2.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_2,
			(SELECT CountCompletion FROM #TempStudent_Comp3 WHERE #TempStudent_Comp3.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_3,
			(SELECT CountCompletion FROM #TempStudent_Comp4 WHERE #TempStudent_Comp4.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_4,
			(SELECT CountCompletion FROM #TempStudent_Comp5 WHERE #TempStudent_Comp5.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_5,
			(SELECT CountCompletion FROM #TempStudent_Comp6 WHERE #TempStudent_Comp6.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_6
		FROM
			OGP_Student	
		WHERE
			OGP_Student.AcademicYearID = @AcademicYearID
			AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

		ON t.ID = OGP_Student.ID
		 

	


SELECT
	(SELECT [Description] FROM SkillsQuestion WHERE ID = @QuestionID) AS SkillsQuestionDescription,
	OGP_Student.AcademicYearID, StudentRef, Forenames, Surname, 

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = OGP_Student.AcademicYearID ) + '0831' AS DateTime),
	OGP_Student.DOB
	)) AS AgeOn31Aug,
	Gender, 
	(SELECT Ethnicity.Code + ' - ' + Ethnicity.[Definition] FROM Ethnicity WHERE Ethnicity.ID = OGP_Student.EthnicityID) AS Ethnicity, 
	DOB, 

	#TempOverallStudentCompletion.StudentOverallCompletionID, 
	ISNULL((SELECT [Description]FROM Completion WHERE Completion.ID = #TempOverallStudentCompletion.StudentOverallCompletionID), 'n/a') AS CompletionStatus, 
	UserDefinedString1 AS StudentUserDefinedString1, UserDefinedString2 AS StudentUserDefinedString2, UserDefinedString3 AS StudentUserDefinedString3, UserDefinedString4 AS StudentUserDefinedString4,
	UserDefinedString5 AS StudentUserDefinedString5, UserDefinedString6 AS StudentUserDefinedString6, UserDefinedString7 AS StudentUserDefinedString7, UserDefinedString8 AS StudentUserDefinedString8,
	UserDefinedNumber AS StudentUserDefinedNumber, UserDefinedNumber2 AS StudentUserDefinedNumber2, UserDefinedDate AS StudentUserDefinedDate, 
	(SELECT LLDDandHealthProblem.Code + ' - ' + LLDDandHealthProblem.[Definition] FROM LLDDandHealthProblem WHERE LLDDandHealthProblem.ID = OGP_Student.LLDDandHealthProblemID) AS LLDDandHealthProblem, 
	OGP_Student.FreeSchoolMeal,
	
	OGP_Student.ID AS OGP_StudentID,

	 vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period01 AS CrossCollPeriod01,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period02 AS CrossCollPeriod02,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period03 AS CrossCollPeriod03, vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period04 AS CrossCollPeriod04,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period05 AS CrossCollPeriod05,  
	 vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period06 AS CrossCollPeriod06,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period07 AS CrossCollPeriod07,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period08 AS CrossCollPeriod08, vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period09 AS CrossCollPeriod09,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period10 AS CrossCollPeriod10,
	#TempvSkillsStudentAvgByQuestion_Latest.Diff_Start_Latest AS CrossCollDifference,
	#TempvSkillsStudentAvgByQuestion_Latest.StartingPeriod AS CrossCollStartingPeriod,
	#TempvSkillsStudentAvgByQuestion_Latest.MostRecentPeriod AS CrossCollMostRecentPeriod,
	#TempvSkillsStudentAvgByQuestion_Latest.MostRecentPeriodValue AS CrossCollMostRecentPeriodValue,
	#TempvSkillsStudentAvgByQuestion_Latest.StartingPeriodValue AS CrossCollStartingPeriodValue

FROM 
	OGP_Student 
	LEFT JOIN #TempvSkillsStudentAvgByQuestion_Latest ON OGP_Student.ID =  #TempvSkillsStudentAvgByQuestion_Latest.OGP_StudentID
	LEFT JOIN vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot ON OGP_Student.ID = vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.OGP_StudentID AND vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.SkillsQuestionID = @QuestionID
	LEFT JOIN #TempOverallStudentCompletion ON OGP_Student.ID = #TempOverallStudentCompletion.OGP_StudentID

WHERE
	OGP_Student.AcademicYearID = @AcademicYearID
	AND OGP_Student.RecordStatus <> 'Obsolete'
	AND (CASE WHEN @ShowStudentsWithAnswers = 2 THEN 2 ELSE (CASE WHEN #TempvSkillsStudentAvgByQuestion_Latest.StartingPeriod IS NULL THEN 0 ELSE 1 END) END) = @ShowStudentsWithAnswers
	


GO



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO




--exec [sp_Student_Est_Act_VA_CA] '19/20'

ALTER Procedure [sp_Student_Est_Act_VA_CA]

 @AcademicYearID AS VARCHAR(5),
 @UseEnrolmentWebSave AS BIT = 0,
 @UserName AS VARCHAR(255) = NULL

AS 

-- =============================================
-- Author:		Andrew Genner
-- Create date: 01/02/2018
-- Adapted from sp_Student_Est_Act_VA
-- =============================================
-- Modified 06/03/2018
-- Added new fields - EstPoints_AcYr2dp, EstGrade_AcYr, EstGradeInflated_AcYr, VAScore_vs_AcYr, EnrolmentGradeVAScore_vs_AcYr
-- Modified 23/04/18 AMG
-- Added in the Left Join to vKS5Aim_L2L3CAStudent to get actual CA VA.  Added in VAScore_vs_Orig2dp calcs etc.
-- =============================================
-- Modified:	AMG 28/04/2018 v1.4.0
-- Added the #TempMostRecentCollegeEstPoints temp table in - this is so we can show colunms of most recent VA
-- When 2pd fields are shown, these are in the columns.  The non-2dp fields are used for the Totals/Avgs.  The 2dp columns are NOT /10
-- The non-2dp fields are /10 (otherwise the totals don't work).
-- =============================================
-- Modified:	AMG 28/04/2018 v1.5.0
-- Made the InScope nore robust and made sure it doesn't /10 when it is a tech cert
-- If the InYearGrade is Null and the enrolment is withdrawn, set grade to U and zero points
-- =============================================
-- Modified AMG 01/10/2018 v1.7.0
-- Corrected some CASE Staements to CASE WHEN x IS NULL
-- Added New field MappingInfo - to indicate if record is mapped using the College Generic Headline figure
-- =============================================
-- Modified AMG 01/03/2018 v1.8.0
-- Added CA_TypeID so sp_EstAct_Grouping can use it
-- =============================================
-- Modified AMG 10/12/2018 v1.9.0
-- replaced WHEN 'Tech Level' with IN('Tech Level','L3 CA')
-- replaced WHEN 'Tech Cert' with IN('Tech Cert','L2 CA') 
-- =============================================
-- Modified AMG 27/12/2018 v1.9.0
-- Added new Pointsfrom1718 the #TempQOE
-- Modified AMG 11/02/2019 v1.10.0
-- Added  'L2 Other' to the IN('Tech Cert', 'L2 CA') list
-- =============================================
-- Modified AMG 27/05/2019 v1.13.0
-- Added CA_QualTypeDescription
-- =============================================
-- Modified AMG 04/06/2019 v1.13.0
-- Added New Student, Enrolment, Course UDFs and TeachingGroupCode
-- =============================================
-- Modified AMG 24/06/2019 v1.14.0
-- Added QOE precalculated points
-- EstPoints_AcYrMin3 - when we have more than 3 years national data, for AcYrMin3 we want to find the most recent available data - not just AcYr-3
-- =============================================
-- Modified AMG 01/07/2019 v1.14.0
-- Added InYear Points 5 - 8 and all the extra fields that entails.
-- =============================================
-- Modified AMG 01/07/2019 v1.16.0
-- IY Most Recent and Points 5 - 8 were always /10 - now changed to /1 if techcert, L2CA, L2Oth 
-- =============================================
-- Modified AMG 19/01/2020 v1.18.0
-- Where Clause for CA_LearningAimRef - now tests for empty string and NULLs - more robust
-- =============================================
-- Modified AMG 30/01/2020 v1.19.0
-- HighlightPurpl, HighlightYellow - removed the 2dp from the fields as these are not used by the GUI
-- =============================================
-- Modified AMG 14/02/2020 v1.20.0
-- Added in fn_ConvertNewQOEPointstoOldQOEPoints - so we can convert new to old QOE points so we can use National Data for predictive grades in 16/17 and 15/16
-- =============================================
-- Modified AMG 03/04/2020 v1.21.0
-- Added in NVQLevel
-- =============================================
-- Modified AMG 24/04/2020 v1.22.0
-- Added in @UseEnrolmentWebSave and @UserName optional parameters.
-- Introduced the tabel #TempEnrolment.  This is populated with all enrolments, OR, if @EnrolmentWebSave is true, just the few we are saving via the web
-- Changed the way InYearGrade is joined.  We now have InYearGrade.LearningAimRef populated by the Web.  So we pull IYGrades into this SP by matching on LearningAimref + Course
-- If we can't match on LearningAimRef+Course, we just link on Course (as we used to).  Got rid of automatically setting IY points to 0 if enrol is Withdrawn.
-- Added InYearGrade Notes 1-8, PersonalTargetGrade
-- Added MostRecentNationalDataYear
-- Added OutcomeID, OutcomeDescription, TeachingGroupTitle
-- =============================================
-- Modified AMG 23/11/2020 v1.26
-- Data now comes from vStudentEntryLearningAim rather than StudentEntryLearningAim
-- =============================================
-- Modified AMG 26/04/2021 v1.28
-- We have introduced some system settings to distribute the Target Grades based on the Quals on Entry for CA type qualifications
-- 1. A System Setting that allows grades to be distributed above and below the CA Attainment Grade based on the Avg QOE score for the LAim
-- 2. A System Setting that allows grades to be distributed above the CA Attainment Grade based on the Avg QOE score for the LAim.  The minimum Target Grade will be the CA Attainment Grade.
-- If both are TRUE, then (2) over-rides (1)
-- Depending on which of these settings are True, a new section has been added to this SP that calcluates a multiplication factor used to adjust the Target Grade Points.
-- =============================================
-- Modified AMG 06/04/2021 v1.28
-- Added the IYMostRecentGradeNo, MostRecentCollegeEstGradeNo, MostRecentBelowTarget, MostRecentAboveTarget, MostRecentAtTarget fields for better reporting purposes
-- =============================================
-- Modified AMG 16/07/2021 v1.29
-- Added 8 new InYearGradeEffort Description fields varchar(100)
-- =============================================
-- Modified AMG 22/00/2021 v1.30
-- Missing a Group By, which was causing an error.  Now fixed.
-- Added functionality for multi-year enrols on the same learning aim, so target grades in year 1 are used for frozen for subsequent years
-- Added TargetFrozenAcademicYearID
-- =============================================
-- Modified AMG 13/06/2022 v1.32
-- Added InYear Points 9 - 12
-- =============================================
-- Modified AMG 24/01/2023 v1.34
-- Added EnrolmentGradeNo, EnrolmentGradeBelowTarget, EnrolmentGradeAboveTarget, EnrolmentGradeAtTarget
-- =============================================
-- Modified AMG 23/03/2023 v1.35
-- Added some protection to potential / 0 problems (line 334, 994)
-- Altered PersonalTargetGrade to VARCHAR(255)
-- =============================================
-- Modified AMG 31/10/2023 v1.36
-- Added CountOfMappedQOE
-- Added CollegeStructure
-- =============================================
-- Modified AMG 29/04/2024 v1.38
-- changed Stu and Enrol Num UDFs back to decimal(19,2) - not varchar(30)
-- =============================================

--DROP TABLE #TempQOEPointsAll

--DROP TABLE #TempStudent
--DECLARE @AcademicYearID CHAR(5)
--SELECT @AcademicYearID = '18/19'

DECLARE @AcademicYearNo INTEGER
SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID

	CREATE TABLE #TempEnrolment (ID INTEGER NOT NULL) --Used to populate #TempMain
	--Similarly, if we are only saving a few enrolments, populate #TempEnrolment with just a few, else, populate all of them...
	IF @UseEnrolmentWebSave = 1 
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		INNER JOIN EnrolmentWebSave 
		ON Enrolment.ID = EnrolmentWebSave.EnrolmentID
		WHERE LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) > 0
		AND EnrolmentWebSave.UserName = @UserName
		AND NOT EXISTS (SELECT ID FROM EstActVA WHERE EstActVA.ID = Enrolment.ID)
	END
	ELSE
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		WHERE LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) > 0
		AND Enrolment.AcademicYearID = @AcademicYearID --AND LearningAimRef = '50081652'
	END

	--Now get a list of all of the Students we need - used for QOE
	SELECT DISTINCT
		Enrolment.StudentID AS ID
	INTO
		#TempStudent
	FROM
		#TempEnrolment
	INNER JOIN Enrolment
	ON #TempEnrolment.ID = Enrolment.ID


--Get the QOE Points (All) for Students in this AcYr
			SELECT 
				S.ID,  
				CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPoints,--Avg(ELATG.Points/Volume) AS QOEPoints
				CASE SUM(ELATG.volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsfrom1718
			INTO
				#TempQOEPointsAll
			FROM 
				EntryLearningAimTypeGrade ELATG
				INNER JOIN EntryLearningAimType ELAT
				ON ELATG.EntryLearningAimTypeID = ELAT.ID
					INNER JOIN EntryLearningAim ELA
					ON ELAT.ID = ELA.EntryLearningAimTypeID
						INNER JOIN vStudentEntryLearningAim SELA
						ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
							INNER JOIN #TempStudent S
							ON S.ID = SELA.StudentID
			AND ELATG.Grade = SELA.Grade
			--AND S.AcademicYearID = @AcademicYearID
			GROUP BY S.ID

			--Newly added for v1.14 (AMG 24/06/2019)
			--If the pre-calculated Points have been imported, this is where we add them in (where there are no imported QOEs)...
			IF @AcademicYearNo < 2018 
			BEGIN
				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, SELAP.QOEPointsAll, NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END
			ELSE
			BEGIN
				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), SELAP.QOEPointsAll --fn replaces NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END


			--get the system setting to decide if we are over-riding the Student QOEs with precalculated points
			DECLARE @SystemSetting AS Bit
			SELECT @SystemSetting = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 5)

			--If the setting is true, we want to over-write imported QOEs with precalculated QOE points where they exist.
			IF @SystemSetting = 1 AND @AcademicYearNo >= 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsAll SET QOEPoints = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), QOEPointsfrom1718 = SELAP.QOEPointsAll--fn replaces NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END
			IF @SystemSetting = 1 AND @AcademicYearNo < 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsAll SET QOEPoints = SELAP.QOEPointsAll, QOEPointsfrom1718 = NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END

	--=============
	--NEW FOR v1.28
	--=============
	DECLARE @SystemSetting20 AS Bit
	SELECT @SystemSetting20 = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 20) --Distribute All CA Target Grades based on Student QOE
	DECLARE @SystemSetting21 AS Bit
	SELECT @SystemSetting21 = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 21)--Distribute CA Target Grades based on Student QOE (Minimum Target Grade = CA Grade)

	CREATE TABLE #TempEnrolmentAdustedQOEFactor (EnrolmentID INT NOT NULL, QOEMultiplicationFactor DECIMAL(19,2) NULL) --Used to populate #TempMain

	IF @SystemSetting20 = 1 OR @SystemSetting21 = 1
	BEGIN
			--Now we have QOE for each student, we can work out the average QOE for each learning aim 
			--Get a distinct list of students on each learning aim
			SELECT DISTINCT LearningAimRef, StudentID INTO #TempLAimStudent FROM Enrolment INNER JOIN #TempEnrolment ON Enrolment.ID = #TempEnrolment.ID
			--Get an average QOE score for each Learning Aim 
			--we only need the from 1718Points because we are going to work out the multiplication factor and the factors will be the same for QOEPoints and QOEPointsfrom 1718
	
			CREATE TABLE #TempAvgQOEPerLAim (LearningAimRef VARCHAR(8) NOT NULL, AvgQOEPointsfrom1718_LAim DECIMAL(19,2) NULL) --Used to populate #TempMain

			--If we are saving from the Web, we need to work out the QOE Average for ALL students on the Learning Aims being saved - not simply the students we are saving.
	
			IF @UseEnrolmentWebSave = 1 
			BEGIN
						--Get a distinct list of the LearningAims we are interested in:
						SELECT DISTINCT LearningAimRef INTO #TempDISTINCTLAim FROM #TempLAimStudent
						--We need to get the QOE score of all students on the Learning Aims we are interested in:
						SELECT 
							S.ID,  
							CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPoints,--Avg(ELATG.Points/Volume) AS QOEPoints
							CASE SUM(ELATG.volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsfrom1718
						INTO
							#TempQOEPointsAll_ForLAim
						FROM 
							EntryLearningAimTypeGrade ELATG
							INNER JOIN EntryLearningAimType ELAT
							ON ELATG.EntryLearningAimTypeID = ELAT.ID
								INNER JOIN EntryLearningAim ELA
								ON ELAT.ID = ELA.EntryLearningAimTypeID
									INNER JOIN vStudentEntryLearningAim SELA
									ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
										INNER JOIN Student S
										ON S.ID = SELA.StudentID
											INNER JOIN Enrolment E
											ON S.ID = E.StudentID
												INNER JOIN #TempDISTINCTLAim
												ON E.LearningAimRef = #TempDISTINCTLAim.LearningAimRef
						AND ELATG.Grade = SELA.Grade
						GROUP BY S.ID

						--Newly added for v1.14 (AMG 24/06/2019)
						--If the pre-calculated Points have been imported, this is where we add them in (where there are no imported QOEs)...
						IF @AcademicYearNo < 2018 
						BEGIN
							INSERT #TempQOEPointsAll_ForLAim (ID, QOEPoints, QOEPointsfrom1718)
							SELECT SELAP.StudentID, SELAP.QOEPointsAll, NULL
							FROM StudentEntryLearningAimPoints SELAP
							WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll_ForLAim WHERE #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID)
						END
						ELSE
						BEGIN
							INSERT #TempQOEPointsAll_ForLAim (ID, QOEPoints, QOEPointsfrom1718)
							SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), SELAP.QOEPointsAll --fn replaces NULL
							FROM StudentEntryLearningAimPoints SELAP
							WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll_ForLAim WHERE #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID)
						END


						--get the system setting to decide if we are over-riding the Student QOEs with precalculated points
						--DECLARE @SystemSetting AS Bit
						SELECT @SystemSetting = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 5)

						--If the setting is true, we want to over-write imported QOEs with precalculated QOE points where they exist.
						IF @SystemSetting = 1 AND @AcademicYearNo >= 2018--overwrite Student QOE points with precalculated points
						BEGIN
								UPDATE #TempQOEPointsAll_ForLAim SET QOEPoints = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), QOEPointsfrom1718 = SELAP.QOEPointsAll--fn replaces NULL
								FROM #TempQOEPointsAll_ForLAim INNER JOIN StudentEntryLearningAimPoints SELAP
								ON #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID
						END
						IF @SystemSetting = 1 AND @AcademicYearNo < 2018--overwrite Student QOE points with precalculated points
						BEGIN
								UPDATE #TempQOEPointsAll_ForLAim SET QOEPoints = SELAP.QOEPointsAll, QOEPointsfrom1718 = NULL
								FROM #TempQOEPointsAll_ForLAim INNER JOIN StudentEntryLearningAimPoints SELAP
								ON #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID
						END

						--Now work out the average QOE Points for each learning aim
						INSERT #TempAvgQOEPerLAim (LearningAimRef, AvgQOEPointsfrom1718_LAim)
						SELECT 
							#TempLAimStudent.LearningAimRef,
							CASE COUNT(#TempQOEPointsAll_ForLAim.ID) WHEN 0 THEN 0 ELSE SUM(#TempQOEPointsAll_ForLAim.QOEPointsfrom1718) / COUNT(#TempQOEPointsAll_ForLAim.ID) END AS AvgQOEPointsfrom1718_LAim	
						FROM #TempQOEPointsAll_ForLAim 
							INNER JOIN #TempLAimStudent 
							ON #TempQOEPointsAll_ForLAim.ID = #TempLAimStudent.StudentID
						GROUP BY 
							#TempLAimStudent.LearningAimRef --Added v1.30 22/09/22  This was missing and causing an error.
			END 
			ELSE
			BEGIN
						INSERT #TempAvgQOEPerLAim (LearningAimRef, AvgQOEPointsfrom1718_LAim)
						SELECT 
							#TempLAimStudent.LearningAimRef,
							CASE COUNT(#TempQOEPointsAll.ID) WHEN 0 THEN 0 ELSE SUM(#TempQOEPointsAll.QOEPointsfrom1718) / COUNT(#TempQOEPointsAll.ID) END AS AvgQOEPointsfrom1718_LAim
						FROM 
							#TempLAimStudent INNER JOIN #TempQOEPointsAll ON #TempLAimStudent.StudentID = #TempQOEPointsAll.ID
						GROUP BY 
							#TempLAimStudent.LearningAimRef
			END
	


			--This works out the multiplication factor for those QOE we know about
			INSERT #TempEnrolmentAdustedQOEFactor (EnrolmentID, QOEMultiplicationFactor)
			SELECT 
				#TempEnrolment.ID, 
				CASE #TempAvgQOEPerLAim.AvgQOEPointsfrom1718_LAim WHEN 0 THEN 0 ELSE (#TempQOEPointsAll.QOEPointsfrom1718 / #TempAvgQOEPerLAim.AvgQOEPointsfrom1718_LAim) END AS QOEMultiplicationFactor --Added CASE 0 AMG 21/03/2023
			FROM 
				#TempEnrolment
					INNER JOIN Enrolment
					ON #TempEnrolment.ID = Enrolment.ID
						INNER JOIN #TempAvgQOEPerLAim
						ON #TempAvgQOEPerLAim.LearningAimRef = Enrolment.LearningAimRef
							INNER JOIN #TempQOEPointsAll
							ON Enrolment.StudentID = #TempQOEPointsAll.ID
		
			--For Enrolments that don't have a multiplication factor, we need it to be 1.
			INSERT #TempEnrolmentAdustedQOEFactor (EnrolmentID, QOEMultiplicationFactor)
			SELECT ID, 1 AS QOEMultiplicationFactor
			FROM #TempEnrolment
			WHERE NOT EXISTS (SELECT ID FROM #TempEnrolmentAdustedQOEFactor WHERE #TempEnrolmentAdustedQOEFactor.EnrolmentID = #TempEnrolment.ID)


			--Where SystemSetting21 is TRUE, if the Multiplication factor is < 1 then set it to 1: This allows the CA Target Grade to be used as the minimum Target whereas students with high QOE can be set more challenging targets.
			IF @SystemSetting21 = 1
			BEGIN
				UPDATE #TempEnrolmentAdustedQOEFactor
				SET #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor = 1
				WHERE #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor < 1
			END
	END
	ELSE
	BEGIN

			--We are not going to adjust any Target Grades using the QOE Multiplication Factor, so for every enrolment, set the factor to 1
			INSERT #TempEnrolmentAdustedQOEFactor (EnrolmentID, QOEMultiplicationFactor)
			SELECT ID, 1 AS QOEMultiplicationFactor
			FROM #TempEnrolment

	END

	--====================
	--End of New for v1.28
	--====================

--College Structure --New for v1.36 (05/12/2023)
DECLARE @FieldName AS VARCHAR(50)= ''
SELECT @FieldName = COALESCE(
					RIGHT(SystemSettingValue.SystemSettingValue,CHARINDEX('|',REVERSE(SystemSettingValue.SystemSettingValue))-1),
					RIGHT(SystemSettingValue.DefaultValue,CHARINDEX('|',REVERSE(SystemSettingValue.DefaultValue))-1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'
DECLARE @TableName AS VARCHAR(50) = ''
SELECT @TableName = COALESCE(
					LEFT(SystemSettingValue.SystemSettingValue, CHARINDEX('|', SystemSettingValue.SystemSettingValue + '|') - 1),
					LEFT(SystemSettingValue.DefaultValue, CHARINDEX('|', SystemSettingValue.DefaultValue + '|') - 1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'

CREATE TABLE #Temp_Enrol_CollegeStructure( [ID] [int] NOT NULL, CollegeStructure [varchar](255) NULL)

DECLARE @CollegeStructureSQL AS VARCHAR(MAX) = ''
IF @TableName = 'Enrolment' 
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Enrolment.' + @FieldName + ' AS CollegeStructure FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID'
END

IF @TableName = 'Course'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Course.' + @FieldName + ' AS CollegeStructure 
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Course ON Course.ID = Enrolment.CourseID'
END

IF @TableName = 'Student'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Student.' + @FieldName + ' AS CollegeStructure  
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Student ON Student.ID = Enrolment.StudentID'
END
EXEC(@CollegeStructureSQL)

--End of College Structure

--In Year Grades - firstly, pick all that match on Course and LAim
CREATE TABLE  #TempIYGradeEnrolment
(ID INT NOT NULL, Point1_Grade VARCHAR(20) NULL, Point2_Grade VARCHAR(20) NULL, Point3_Grade VARCHAR(20) NULL, Point4_Grade VARCHAR(20) NULL, 
Point5_Grade VARCHAR(20) NULL, Point6_Grade VARCHAR(20) NULL, Point7_Grade VARCHAR(20) NULL, Point8_Grade VARCHAR(20) NULL,
Point9_Grade VARCHAR(20) NULL, Point10_Grade VARCHAR(20) NULL, Point11_Grade VARCHAR(20) NULL, Point12_Grade VARCHAR(20) NULL,
		Point1_Points DECIMAL(19,2) NULL, Point2_Points DECIMAL(19,2) NULL, Point3_Points DECIMAL(19,2) NULL, Point4_Points DECIMAL(19,2) NULL, 
		Point5_Points DECIMAL(19,2) NULL, Point6_Points DECIMAL(19,2), Point7_Points DECIMAL(19,2), Point8_Points DECIMAL(19,2),
		Point9_Points DECIMAL(19,2) NULL, Point10_Points DECIMAL(19,2), Point11_Points DECIMAL(19,2), Point12_Points DECIMAL(19,2),
		Point1_Notes VARCHAR(1024) NULL, Point2_Notes VARCHAR(1024) NULL, Point3_Notes VARCHAR(1024) NULL, Point4_Notes VARCHAR(1024) NULL, 
		Point5_Notes VARCHAR(1024) NULL, Point6_Notes VARCHAR(1024) NULL, Point7_Notes VARCHAR(1024) NULL, Point8_Notes VARCHAR(1024) NULL, 
		Point9_Notes VARCHAR(1024) NULL, Point10_Notes VARCHAR(1024) NULL, Point11_Notes VARCHAR(1024) NULL, Point12_Notes VARCHAR(1024) NULL,PersonalTargetGrade VARCHAR(255) NULL,
		Point1_EffortDescription VARCHAR(100) NULL, Point2_EffortDescription VARCHAR(100) NULL, Point3_EffortDescription VARCHAR(100) NULL,
		Point4_EffortDescription VARCHAR(100) NULL, Point5_EffortDescription VARCHAR(100) NULL, Point6_EffortDescription VARCHAR(100) NULL,
		Point7_EffortDescription VARCHAR(100) NULL, Point8_EffortDescription VARCHAR(100) NULL, Point9_EffortDescription VARCHAR(100) NULL, 
		Point10_EffortDescription VARCHAR(100) NULL,Point11_EffortDescription VARCHAR(100) NULL,Point12_EffortDescription VARCHAR(100) NULL)

INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points, 
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is 0 points automatically
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
	--	END) 
	END) AS Point1_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
	--	END) 
	END) AS Point2_Points,
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
	--	END) 
	END) AS Point3_Points, 
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
	--	END) 
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
	--	END) 
	END) AS Point5_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
	--	END) 
	END) AS Point6_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
	--	END) 
	END) AS Point7_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
	--	END) 
	END) AS Point8_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
	END) AS Point9_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
	END) AS Point10_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
	END) AS Point11_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
	END) AS Point12_Points,

	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point9_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point10_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point11_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point12_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
			AND InYearGrade.LearningAimRef = Enrolment.LearningAimRef
			INNER JOIN vLearningAimCA
				ON vLearningAimCA.LearningAimRef = Enrolment.CA_LearningAimRef


--Now, for any that don't match, just match on Course
INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points,
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is 0 points automatically
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
	--	END) 
	END) AS Point1_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
	--	END) 
	END) AS Point2_Points,
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
	--	END) 
	END) AS Point3_Points, 
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
	--	END) 
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
	--	END) 
	END) AS Point5_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
	--	END) 
	END) AS Point6_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
	--	END) 
	END) AS Point7_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
	--	END) 
	END) AS Point8_Points,
 
	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
	END) AS Point9_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
	END) AS Point10_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
	END) AS Point11_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
	END) AS Point12_Points,

	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point9_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point10_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point11_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point12_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN		(SELECT * FROM InYearGrade --We need to do this just in case we end up with records with unmatched LAims, so we could have "duplicate" IYG records
					INNER JOIN (SELECT Max(ID) AS MaxID FROM InYearGrade GROUP BY AcademicYearID, StudentID, CourseID) T
					ON InYearGrade.ID = T.MaxID) InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
		--INNER JOIN InYearGrade
		--	ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
		--	AND InYearGrade.StudentID = Enrolment.StudentID
		--	AND InYearGrade.CourseID = Enrolment.CourseID
			INNER JOIN vLearningAimCA
				ON vLearningAimCA.LearningAimRef = Enrolment.CA_LearningAimRef
WHERE NOT EXISTS (SELECT #TempIYGradeEnrolment.ID FROM #TempIYGradeEnrolment WHERE #TempIYGradeEnrolment.ID = #TempEnrolment.ID)





--Get the core information for the procedure...		
SELECT 

	Enrolment.ID,
	Enrolment.AcademicYearID, 
	Student.StudentRef, Student.Surname, Student.Forenames, 
	Student.ID AS StudentID,
	Enrolment.LearningAimRef, LearningAim.LearningAimRefTitle AS LearningAimTitle,
	NULL AS QualificationDescription, --QualificationLookup.QualificationDescription, 
	NULL AS WholeQualID, --QualificationLookup.WholeQualID,
	NULL AS Qualification, --QualificationLookup.WholeQualID AS Qualification,
	CASE WHEN vLearningAimCA.Size = 0 THEN 0.00001 ELSE vLearningAimCA.Size END AS Size, --CA Equiv of size, --21/03/23 AMG just in case we get a /0 error later...
	NULL AS QualificationID, --QualificationLookup.ID AS QualificationID,
	
	
	vLearningAimCA.LearningAimRefTitle AS CA_LearningAimTitle, --CA Equiv of Qualif Desc
	Enrolment.CA_LearningAimRef AS CA_LearningAimRef, --CA Equiv of WholeQualID

	vLearningAimCA.AB, --Only available for CA
	vLearningAimCA.DC, --Only available for CA
	
	'CA' AS VA_Type,
	ISNULL(vLearningAimCA.MinGrade,'') + '-' + ISNULL(vLearningAimCA.MaxGrade,'') AS GradeRange,

	CASE WHEN Enrolment.StartDate IS NULL THEN 1 --This is a bit belt and braces because the StartDate should NEVER be NULL, but so much relies on this!
	ELSE
	(CAST('20' + SUBSTRING(Enrolment.AcademicYearID,1,2) AS INT) - dbo.GetAcStartYearFromDate (Enrolment.StartDate) ) + 1 
	END AS Duration,

	vLearningAimCA.[CA_Type] AS Cohort,
	
	CASE WHEN @AcademicYearNo>=2018 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END AS QOEPoints_College,--Vocational (from 18/19, show new QOE  points scale)
	NULL AS QOEPoints_GCSE_College,--Academic

	NULL AS QOEPoints_Final, --CASE WHEN CohortLookup.CohortName IN ('Applied General', 'None') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_Final, --Vocational
	NULL AS QOEPoints_GCSE_Final, --CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_GCSE_Final, --Academic

	(SELECT vLearningAim_CA_National.AverageAttainment --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	--28/06/2019 - in preparation for more than 3 years national data, look for the academic year with data 3 or more years old - whatever is the most recent.
	--WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	AND A.AcademicYearNo =
              (SELECT --find the max academicyearnumber for the vLAImCA_Nat record older or equal to 3 years ago (i.e. if we are in 18/19, does it appear in 15/16 or 14/15 or 13/14 etc.)
              Max(AcademicYearNo) 
              FROM AcademicYear A
              INNER JOIN vLearningAim_CA_National ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
              AND A.AcademicYearNo <= (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3 --the max year equal to or older than 3 years ago
              AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
              )
	) AS EstPoints_AcYrMin3,
	 
	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 2
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) AS EstPoints_AcYrMin2,

	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 1
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) AS EstPoints_AcYrMin1,

	(SELECT AcademicYear.AcademicYearID 
	FROM AcademicYear
	INNER JOIN (SELECT MAX(AcademicYearNo) AS MAXAcademicYearNo FROM vLearningAim_CA_National v INNER JOIN AcademicYear ON v.AcademicYearID = AcademicYear.AcademicYearID WHERE v.LearningAimRef = Enrolment.CA_LearningAimRef AND AcademicYear.AcademicYearNo < @AcademicYearNo) T
	ON T.MAXAcademicYearNo = AcademicYear.AcademicYearNo) AS MostRecentNationalDataYear,



	(SELECT vLearningAim_CA_National.AverageAttainment --v1.28.0 --We need the EstPoints * QOE Multiplication Factor
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	--28/06/2019 - in preparation for more than 3 years national data, look for the academic year with data 3 or more years old - whatever is the most recent.
	--WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	AND A.AcademicYearNo =
              (SELECT --find the max academicyearnumber for the vLAImCA_Nat record older or equal to 3 years ago (i.e. if we are in 18/19, does it appear in 15/16 or 14/15 or 13/14 etc.)
              Max(AcademicYearNo) 
              FROM AcademicYear A
              INNER JOIN vLearningAim_CA_National ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
              AND A.AcademicYearNo <= (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3 --the max year equal to or older than 3 years ago
              AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
              )
	) * #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor AS EstPoints_AcYrMin3_MultipliedByQOEFactor,
	 
	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.28.0 --We need the EstPoints * QOE Multiplication Factor
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 2
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) * #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor AS EstPoints_AcYrMin2_MultipliedByQOEFactor,

	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.28.0 --We need the EstPoints * QOE Multiplication Factor
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 1
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) * #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor AS EstPoints_AcYrMin1_MultipliedByQOEFactor,




	/*NEW*/	(SELECT vLearningAim_CA_National.AverageAttainment --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID)
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) AS EstPoints_AcYr,
	
	vKS5Aim_L2L3CAStudent.NationalAvg AS EstPoints_L3VAStu, --L3VAStudent.EstimatedPoints AS EstPoints_L3VAStu, --v1.4.0
	vKS5Aim_L2L3CAStudent.Points AS ActPoints_L3VAStu, --L3VAStudent.ActualPoints AS ActPoints_L3VAStu, --v1.4.0
	vKS5Aim_L2L3CAStudent.Diff AS VAScore_L3VAStu, --L3VAStudent.ValueAddedScore AS VAScore_L3VAStu, --v1.4.0
	 
	--All the available Enrolment Fields:
	Enrolment.StartDate,
	Enrolment.PlannedEndDate,
	Enrolment.ActualEndDate,
	Enrolment.CompletionID,
	Enrolment.Grade AS EnrolmentGrade,
	--To calculate enrolment points: (Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN
		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade) IS NULL
		THEN
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade) IS NULL
			THEN
				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade2 = Enrolment.Grade)
			ELSE
				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade)
			END
		ELSE
			(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade)
		END
	ELSE
		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade) IS NULL
		THEN
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade) IS NULL
			THEN
				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade2 = Enrolment.Grade)
			ELSE
				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade)
			END
		ELSE
			(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade)
		END
	END
	AS EnrolmentPoints,	

	Enrolment.UserDefinedString1 AS EnrolmentUserDefinedString1,
	Enrolment.UserDefinedString2 AS EnrolmentUserDefinedString2,
	Enrolment.UserDefinedString3 AS EnrolmentUserDefinedString3,
	Enrolment.UserDefinedString4 AS EnrolmentUserDefinedString4,
	Enrolment.UserDefinedNumber AS EnrolmentUserDefinedNumber, 
	Enrolment.UserDefinedDate AS EnrolmentUserDefinedDate,
	Enrolment.UserDefinedString5 AS EnrolmentUserDefinedString5,
	Enrolment.UserDefinedString6 AS EnrolmentUserDefinedString6,
	Enrolment.UserDefinedString7 AS EnrolmentUserDefinedString7,
	Enrolment.UserDefinedString8 AS EnrolmentUserDefinedString8,
	Enrolment.UserDefinedNumber2 AS EnrolmentUserDefinedNumber2,
	Enrolment.TeachingGroupCode,
	Course.CourseCode, --**OK 7/7/17
	Course.Title AS CourseTitle, --**OK 7/7/17
		Course.UserDefinedString1 AS CourseUserDefinedString1, 
	Course.UserDefinedString2 AS CourseUserDefinedString2,
	Course.UserDefinedString3 AS CourseUserDefinedString3,
	Course.UserDefinedString4 AS CourseUserDefinedString4,
	--All the available Student Fields:
	Student.DOB,
	Ethnicity.Code As EthnicityCode,
	Ethnicity.[Definition] AS EthnicityDefinition,
	Student.Gender,
	Student.TutorGroupCode,
	Student.UserDefinedString1 AS StudentUserDefinedString1, 
	Student.UserDefinedString2 AS StudentUserDefinedString2,
	Student.UserDefinedString3 AS StudentUserDefinedString3,
	Student.UserDefinedString4 AS StudentUserDefinedString4,
	Student.UserDefinedNumber AS StudentUserDefinedNumber,
	Student.UserDefinedString5 AS StudentUserDefinedString5, 
	Student.UserDefinedString6 AS StudentUserDefinedString6,
	Student.UserDefinedString7 AS StudentUserDefinedString7,
	Student.UserDefinedString8 AS StudentUserDefinedString8,
	Student.UserDefinedNumber2 AS StudentUserDefinedNumber2,
	Student.UserDefinedDate AS StudentUserDefinedDate,
	LLDDandHealthProblem.Code AS LLDDandHealthProblemCode,
	LLDDandHealthProblem.[Definition] AS LLDDandHealthProblemDefinition,
	Student.FreeSchoolMeal,
	NULL AS QualifcationCodeLookupID, --QualificationCodeLookup.ID AS QualifcationCodeLookupID,
	vLearningAimCA.GradeBoundaryInflation AS GradeBoundaryInflation, --QualificationCodeLookup.GradeBoundaryInflation,
	ISNULL(vLearningAimCA.LearningAimRef,'') + ' - ' + ISNULL(vLearningAimCA.LearningAimRefTitle,'') AS QualificationCodeandName,
	NULL AS SubjectCode, --(SELECT SL.SubjectCode FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectCode, --** 7/7/17 Added
	NULL AS SubjectName, --(SELECT SL.SubjectName FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectName, --** 7/7/17 Added

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 'U' ELSE InYearGrade.Point1_Grade END) AS Point1_Grade, --If enrolment is withdrawn, it is a U automatically
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 'U' ELSE InYearGrade.Point2_Grade END) AS Point2_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 'U' ELSE InYearGrade.Point3_Grade END) AS Point3_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 'U' ELSE InYearGrade.Point4_Grade END) AS Point4_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 'U' ELSE InYearGrade.Point5_Grade END) AS Point5_Grade, --Added 01/07/2019
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 'U' ELSE InYearGrade.Point6_Grade END) AS Point6_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 'U' ELSE InYearGrade.Point7_Grade END) AS Point7_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 'U' ELSE InYearGrade.Point8_Grade END) AS Point8_Grade,

	#TempIYGradeEnrolment.Point1_Grade,
	#TempIYGradeEnrolment.Point2_Grade,
	#TempIYGradeEnrolment.Point3_Grade,
	#TempIYGradeEnrolment.Point4_Grade,
	#TempIYGradeEnrolment.Point5_Grade,
	#TempIYGradeEnrolment.Point6_Grade,
	#TempIYGradeEnrolment.Point7_Grade,
	#TempIYGradeEnrolment.Point8_Grade,
	#TempIYGradeEnrolment.Point9_Grade,
	#TempIYGradeEnrolment.Point10_Grade,
	#TempIYGradeEnrolment.Point11_Grade,
	#TempIYGradeEnrolment.Point12_Grade,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is 0 points automatically
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
	--		END
	--	END) 
	--END) AS Point1_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
	--		END
	--	END) 
	--END) AS Point2_Points,
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
	--		END
	--	END) 
	--END) AS Point3_Points, 
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
	--		END
	--	END) 
	--END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
	--		END
	--	END) 
	--END) AS Point5_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
	--		END
	--	END) 
	--END) AS Point6_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
	--		END
	--	END) 
	--END) AS Point7_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
	--		END
	--	END) 
	--END) AS Point8_Points,

	#TempIYGradeEnrolment.Point1_Points, 
	#TempIYGradeEnrolment.Point2_Points, 
	#TempIYGradeEnrolment.Point3_Points, 
	#TempIYGradeEnrolment.Point4_Points, 
	#TempIYGradeEnrolment.Point5_Points, 
	#TempIYGradeEnrolment.Point6_Points, 
	#TempIYGradeEnrolment.Point7_Points, 
	#TempIYGradeEnrolment.Point8_Points,
	#TempIYGradeEnrolment.Point9_Points, 
	#TempIYGradeEnrolment.Point10_Points, 
	#TempIYGradeEnrolment.Point11_Points, 
	#TempIYGradeEnrolment.Point12_Points,
	#TempIYGradeEnrolment.Point1_Notes, 
	#TempIYGradeEnrolment.Point2_Notes, 
	#TempIYGradeEnrolment.Point3_Notes, 
	#TempIYGradeEnrolment.Point4_Notes, 
	#TempIYGradeEnrolment.Point5_Notes, 
	#TempIYGradeEnrolment.Point6_Notes, 
	#TempIYGradeEnrolment.Point7_Notes, 
	#TempIYGradeEnrolment.Point8_Notes,
	#TempIYGradeEnrolment.Point9_Notes, 
	#TempIYGradeEnrolment.Point10_Notes, 
	#TempIYGradeEnrolment.Point11_Notes, 
	#TempIYGradeEnrolment.Point12_Notes,
	#TempIYGradeEnrolment.PersonalTargetGrade,

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = Student.AcademicYearID ) + '0831' AS DateTime),
	Student.DOB
	)) AS AgeOn31Aug,
	vLearningAimCA.CA_QualTypeID,

	(SELECT ABAcronym FROM QAN_AB WHERE QAN_AB.AB = vLearningAimCA.AB) AS ABAcronym,
	(SELECT DCName FROM QAN_DC WHERE QAN_DC.DC = vLearningAimCA.DC) AS DCName,
	CAST((SELECT Map FROM QAN_DC WHERE QAN_DC.DC = vLearningAimCA.DC) AS VARCHAR(4)) AS DCType,
	(SELECT CA_QualType.IsGraded FROM CA_QualType WHERE CA_QualType.ID = vLearningAimCA.CA_QualTypeID) AS IsGraded,
	Enrolment.ID AS EnrolmentID,
	Enrolment.MappingInfo,
	Enrolment.OutcomeID,
	(CASE Enrolment.OutcomeID WHEN 1 THEN 'Achieved' WHEN 2 THEN 'Partial Ach.' WHEN 3 THEN 'Not Achieved' WHEN 8 THEN 'Not Known' ELSE NULL END) AS OutcomeDescription,
	Enrolment.TeachingGroupTitle,
	vLearningAimCA.[CA_Type] AS CA_Type,
	#TempIYGradeEnrolment.Point1_EffortDescription,
	#TempIYGradeEnrolment.Point2_EffortDescription,
	#TempIYGradeEnrolment.Point3_EffortDescription,
	#TempIYGradeEnrolment.Point4_EffortDescription,
	#TempIYGradeEnrolment.Point5_EffortDescription,
	#TempIYGradeEnrolment.Point6_EffortDescription,
	#TempIYGradeEnrolment.Point7_EffortDescription,
	#TempIYGradeEnrolment.Point8_EffortDescription,
	#TempIYGradeEnrolment.Point9_EffortDescription,
	#TempIYGradeEnrolment.Point10_EffortDescription,
	#TempIYGradeEnrolment.Point11_EffortDescription,
	#TempIYGradeEnrolment.Point12_EffortDescription

INTO #TempMain

FROM Student 
		LEFT JOIN #TempQOEPointsAll
		ON Student.ID = #TempQOEPointsAll.ID
			INNER JOIN Enrolment 
			ON Student.ID = Enrolment.StudentID
				INNER JOIN #TempEnrolment
				ON Enrolment.ID = #TempEnrolment.ID
					LEFT JOIN LearningAim 
					ON LearningAim.LearningAimRef = Enrolment.LearningAimRef
						LEFT JOIN  #TempEnrolmentAdustedQOEFactor --Added v1.28.0
						ON  #TempEnrolmentAdustedQOEFactor.EnrolmentID = Enrolment.ID
						LEFT JOIN vLearningAimCA
						ON Enrolment.CA_LearningAimRef = vLearningAimCA.LearningAimRef
						--AND Enrolment.AcademicYearID = vLearningAim_CA_National.LearningAimRef
							LEFT JOIN vKS5Aim_L2L3CAStudent --Added v1.4.0
							ON vKS5Aim_L2L3CAStudent.AcademicYearID = Enrolment.AcademicYearID
							AND LTRIM(RTRIM(vKS5Aim_L2L3CAStudent.QualificationNumber)) = Enrolment.LearningAimRef
							AND vKS5Aim_L2L3CAStudent.StudentID = Enrolment.StudentID
								LEFT JOIN Course
								ON Course.ID = Enrolment.CourseID
								LEFT JOIN Ethnicity
								ON Ethnicity.ID = Student.EthnicityID
								LEFT JOIN LLDDandHealthProblem
								ON LLDDandHealthProblem.ID = Student.LLDDandHealthProblemID
								--LEFT JOIN InYearGrade
								--ON Enrolment.StudentID = InYearGrade.StudentID
								--AND Enrolment.AcademicYearID = InYearGrade.AcademicYearID
								--AND Enrolment.CourseID = InYearGrade.CourseID
								LEFT JOIN #TempIYGradeEnrolment
								ON #TempEnrolment.ID = #TempIYGradeEnrolment.ID
WHERE 
	Enrolment.AcademicYearID = @AcademicYearID
	AND LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) > 0-- IS NOT NULL --only pull those Enrolment records mapped to a CA Learning Aim
	AND Enrolment.QualificationID IS NULL --if L3VA QualificationID is mapped, do not include recs!

-----------------------------------------------------------------------------------------
--V1.30 - find any Targets set for a "frozen" year. If we find any, then use them here.--
-----------------------------------------------------------------------------------------
--SELECT * FROM #TempEnrolment WHERE ID IN (119147, 119150, 119159, 186304)
--DECLARE @AcademicYearID VARCHAR(5)
--DECLARE @AcademicYearNo INTEGER
--SELECT @AcademicYearID = '18/19'
--SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID
CREATE TABLE #TempEnrolmentFrozenTargets (ID INTEGER NOT NULL, MostRecentCollegeEstGrade VARCHAR(10) NULL, MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL, AcademicYearID VARCHAR(5) NULL)

--A list of students and LearningAims who have a frozen Target grade in the year before this...
SELECT StudentRef, T2.AcademicYearID, T2.LearningAimRef
INTO #TempStudentsWithFrozenGrades_LA
FROM
(
		SELECT T.StudentRef, T.LearningAimRef, T.AcademicYearID
		, row_number() OVER(PARTITION BY T.StudentRef, T.LearningAimref ORDER BY MIN(T.AcademicYearNo) ASC) AS rn
		FROM 
		(
			SELECT DISTINCT Enrolment.StudentRef, Enrolment.LearningAimRef, Enrolment.AcademicYearID, (SELECT AcademicYearNo FROM AcademicYear WHERE AcademicYearID = Enrolment.AcademicYearID) AS AcademicYearNo
			FROM
				(SELECT Enrolment.ID
				FROM Enrolment
					INNER JOIN FreezeTargetGradeForFutureYears
					ON FreezeTargetGradeForFutureYears.StudentRef = Enrolment.StudentRef
					AND FreezeTargetGradeForFutureYears.AcademicYearID = Enrolment.AcademicYearID
					AND FreezeTargetGradeForFutureYears.LearningAimRef = Enrolment.LearningAimRef
						INNER JOIN AcademicYear ON FreezeTargetGradeForFutureYears.AcademicYearID  = AcademicYear.AcademicYearID
						AND AcademicYear.AcademicYearNo < @AcademicYearNo
						--AND Enrolment.StudentRef = '30134455'
						AND Enrolment.StudentRef IN (SELECT DISTINCT StudentRef FROM Enrolment INNER JOIN #TempEnrolment ON Enrolment.ID = #TempEnrolment.ID)
				) Frozen
			INNER JOIN Enrolment ON Frozen.ID = Enrolment.ID
		) T
		INNER JOIN Enrolment ON Enrolment.StudentRef = T.StudentRef
		
		GROUP BY T.StudentRef, T.AcademicYearID, T.LearningAimRef
) T2
WHERE T2.rn = 1

--Now we know the frozen records, we need the target grades from the EstActVA table
SELECT DISTINCT
	#TempStudentsWithFrozenGrades_LA.StudentRef, #TempStudentsWithFrozenGrades_LA.AcademicYearID, #TempStudentsWithFrozenGrades_LA.LearningAimRef,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstPoints, EstActVA.MostRecentCollegeEstGradeInflated
INTO
	#TempStudentsWithFrozenGrades_WithTargets_LA
FROM
	EstActVA
		INNER JOIN #TempStudentsWithFrozenGrades_LA
		ON EstActVA.StudentRef = #TempStudentsWithFrozenGrades_LA.StudentRef
		AND EstActVA.LearningAimRef = #TempStudentsWithFrozenGrades_LA.LearningAimRef
		AND EstActVA.AcademicYearID = #TempStudentsWithFrozenGrades_LA.AcademicYearID

--Now we know the target grades from the frozen records, pull these frozen target grades from the previous years in EstActVA and apply them to the current year
INSERT #TempEnrolmentFrozenTargets (ID, MostRecentCollegeEstGrade, MostRecentCollegeEstPoints, MostRecentCollegeEstGradeInflated, AcademicYearID)
SELECT 
	Enrolment.ID, #TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGrade,
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstPoints, 
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGradeInflated,
	#TempStudentsWithFrozenGrades_WithTargets_LA.AcademicYearID
FROM
	Enrolment
		INNER JOIN #TempStudentsWithFrozenGrades_WithTargets_LA
		ON Enrolment.StudentRef = #TempStudentsWithFrozenGrades_WithTargets_LA.StudentRef
			INNER JOIN Course
			ON Course.ID = Enrolment.CourseID
			AND #TempStudentsWithFrozenGrades_WithTargets_LA.LearningAimRef = Enrolment.LearningAimRef
			AND Enrolment.AcademicYearID = @AcademicYearID


--#TempMostRecentCollegeEstPoints has been used long before v1.30, but is useful to store MostRecentCollegeEstPointsMultipliedByQOEFactor & MostRecentCollegeEstGradeInflated

--Get the MostRecentPoints into a Temp table 
CREATE TABLE #TempMostRecentCollegeEstPoints (ID INTEGER NOT NULL,  MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstPointsMultipliedByQOEFactor DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL)

INSERT #TempMostRecentCollegeEstPoints (ID, MostRecentCollegeEstPoints, MostRecentCollegeEstPointsMultipliedByQOEFactor, MostRecentCollegeEstGradeInflated)
SELECT
	#TempMain.ID,
	(CASE WHEN #TempMain.EstPoints_AcYrMin1 IS NULL THEN 
		(CASE WHEN #TempMain.EstPoints_AcYrMin2 IS NULL THEN 
			#TempMain.EstPoints_AcYrMin3
		ELSE  
			#TempMain.EstPoints_AcYrMin2
		END) 
	ELSE  
		EstPoints_AcYrMin1
	END) AS MostRecentCollegeEstPoints,

	(CASE WHEN #TempMain.EstPoints_AcYrMin1_MultipliedByQOEFactor IS NULL THEN 
		(CASE WHEN #TempMain.EstPoints_AcYrMin2_MultipliedByQOEFactor IS NULL THEN 
			#TempMain.EstPoints_AcYrMin3_MultipliedByQOEFactor
		ELSE  
			#TempMain.EstPoints_AcYrMin2_MultipliedByQOEFactor
		END) 
	ELSE  
		EstPoints_AcYrMin1_MultipliedByQOEFactor
	END) AS MostRecentCollegeEstPointsMultipliedByQOEFactor,
	NULL AS MostRecentCollegeEstGradeInflated
FROM 
	#TempMain

--------------------------------------------------------------------------------------------------------------------------------
-- v1.30 Now we have the frozen target data in the #TempEnrolmentFrozenTargets table, populate #TempMostRecentCollegeEstPoints--
--------------------------------------------------------------------------------------------------------------------------------
--Substitute the MostRecentPoints with the Frozen MostRecentPoints held in #TempEnrolmentFrozenTargets
UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints = #TempEnrolmentFrozenTargets.MostRecentCollegeEstPoints
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID

UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated = ISNULL(#TempEnrolmentFrozenTargets.MostRecentCollegeEstGradeInflated,'')
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID


--This is the start of getting the Most Recent InYear Grade / Points in...
--v1.32.  A CASE statement can only be nested 10 levels deep, therefore here, we only go 10 levels deep.
--and place the values into #TempMostRecentInYearPointsGrades_1.  Then, in the next section, populate #TempMostRecentInYearPointsGrades
--by going 2 levels deeper again!
SELECT 
	#TempMain.ID,
	#TempMain.Point2_Grade,
	#TempMain.Point1_Grade,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Grade
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Grade 
										--	ELSE #TempMain.Point2_Grade END)
										--ELSE #TempMain.Point3_Grade END)
									ELSE #TempMain.Point4_Grade END)
								ELSE #TempMain.Point5_Grade END)
							ELSE #TempMain.Point6_Grade END)
						ELSE #TempMain.Point7_Grade END)
					ELSE #TempMain.Point8_Grade END) 
				ELSE #TempMain.Point9_Grade END)
			ELSE #TempMain.Point10_Grade END)
		ELSE #TempMain.Point11_Grade END)
	ELSE #TempMain.Point12_Grade END) 
	AS IYMostRecentGrade,

	#TempMain.Point2_Points,
	#TempMain.Point1_Points,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Points
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Points 
										--	ELSE #TempMain.Point2_Points END)
										--ELSE #TempMain.Point3_Points END)
									ELSE #TempMain.Point4_Points END) 
								ELSE #TempMain.Point5_Points END)
							ELSE #TempMain.Point6_Points END)
						ELSE #TempMain.Point7_Points END)
					ELSE #TempMain.Point8_Points END)
				ELSE #TempMain.Point9_Points END)
			ELSE #TempMain.Point10_Points END)
		ELSE #TempMain.Point11_Points END)
	ELSE #TempMain.Point12_Points END) 
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										'Pt.3'
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		(CASE WHEN ISNULL(#TempMain.Point1_Grade,'') = '' THEN
										--			'' 
										--		ELSE 'Pt.1' END)
										--	ELSE 'Pt.2' END)
										--ELSE 'Pt.3' END)
									ELSE 'Pt.4' END)
								ELSE 'Pt.5' END)
							ELSE 'Pt.6' END)
						ELSE 'Pt.7' END)
					ELSE 'Pt.8' END)
				ELSE 'Pt.9' END)
			ELSE 'Pt.10' END)
		ELSE 'Pt.11' END)
	ELSE 'Pt.12' END) 
	AS IYMostRecentPoint
INTO			
	#TempMostRecentInYearPointsGrades_1
FROM
	#TempMain
	

SELECT 
#TempMostRecentInYearPointsGrades_1.ID,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Grade 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Grade END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentGrade END)
	AS IYMostRecentGrade,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Points 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Points END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoints END)
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point1_Grade,'') = '' THEN
				'' 
			ELSE 'Pt.1' END)
		ELSE 'Pt.2' END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoint END)
	AS IYMostRecentPoint

INTO
#TempMostRecentInYearPointsGrades
FROM
#TempMostRecentInYearPointsGrades_1

--This last bit does a few calcs based upon the information pulled out from the Main part of the proedure.
--Doing it here at the end saves complication and duplication, so hopefully it is more efficient	
--select * from #TempMain
SELECT
	#TempMain.ID,
	#TempMain.AcademicYearID,
	#TempMain.StudentRef,
	#TempMain.Surname,
	#TempMain.Forenames,
	#TempMain.LearningAimRef,
	#TempMain.LearningAimTitle,
	#TempMain.QualificationDescription,
	#TempMain.WholeQualID,
	#TempMain.size,
	#TempMain.QualificationID,

	#TempMain.Duration,
	#TempMain.Cohort,
	CAST(#TempMain.QOEPoints_College AS DECIMAL(19,2)) AS QOEPoints_College2dp,
	CAST(#TempMain.QOEPoints_GCSE_College AS DECIMAL(19,2)) AS QOEPoints_GCSE_College2dp,
	CAST(#TempMain.QOEPoints_Final AS DECIMAL(19,2)) AS QOEPoints_Final2dp,
	CAST(#TempMain.QOEPoints_GCSE_Final AS DECIMAL(19,2)) AS QOEPoints_GCSE_Final2dp,
	CAST(#TempMain.EstPoints_AcYrMin3 AS DECIMAL(19,2)) AS EstPoints_AcYrMin32dp,
	CAST(#TempMain.EstPoints_AcYrMin2 AS DECIMAL(19,2)) AS EstPoints_AcYrMin22dp,
	CAST(#TempMain.EstPoints_AcYrMin1 AS DECIMAL(19,2)) AS EstPoints_AcYrMin12dp,

	CAST(#TempMain.EstPoints_L3VAStu AS DECIMAL(19,2)) AS EstPoints_L3VAStu2dp,
	CAST(#TempMain.ActPoints_L3VAStu AS DECIMAL(19,2)) AS ActPoints_L3VAStu2dp,
	CAST(#TempMain.VAScore_L3VAStu AS DECIMAL(19,2)) AS VAScore_L3VAStu2dp,
	
	CASE #TempMain.AcademicYearID WHEN '17/18' THEN 'EstPoints_AcYrMin2'
	ELSE
		CASE Duration	WHEN 1 THEN 'EstPoints_AcYrMin2'
						ELSE 'EstPoints_AcYrMin3' --changed from 'WHEN 2 THEN' to ELSE
		END
	END AS HighlightPurple,
	
	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3, #TempMain.Cohort)
	) AS EstGrade_AcYrMin3,

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort) 
	) AS EstGrade_AcYrMin2,

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort)
	) AS EstGrade_AcYrMin1,

	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3_MultipliedByQOEFactor, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYrMin3,

	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2_MultipliedByQOEFactor, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYrMin2,

	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1_MultipliedByQOEFactor, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYrMin1,

	--most recent estimated college grade - if 1 is null, choose 2 if 2 is null choose 3...
	--(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort) IS NULL THEN 
	--	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3, #TempMain.Cohort) 
	--	ELSE  
	--	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort)
	--	END) 
	--ELSE  
	--dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort) 
	--END) AS MostRecentCollegeEstGrade,
	--simplified v1.30:
	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints, #TempMain.Cohort)
	) AS MostRecentCollegeEstGrade,


	--most recent estimated college grade (Inflated)- if 1 is null, choose 2 if 2 is null choose 3...
	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	--(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort) IS NULL THEN 
	--	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3_MultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation)
	--	ELSE  
	--	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2_MultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation)
	--	END) 
	--ELSE  
	--dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1_MultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation) 
	--END) AS MostRecentCollegeEstGradeInflated,
	--simplified v1.30:  If the Inflated Grade is NULL, in #TempMostRecentCollegeEstPoints, then it is not to be overwritten by a frozen grade
	(CASE WHEN #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated IS NULL 
	THEN
		(SELECT 
		dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPointsMultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation) 
		) 
	ELSE #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated END) AS MostRecentCollegeEstGradeInflated,

	Null AS Blank, --This is intentional because it is used by the Target Export routine.

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_L3VAStu, #TempMain.Cohort)
	) AS EstGrade_L3VAStu,

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, ActPoints_L3VAStu, #TempMain.Cohort)
	) AS ActGrade_L3VAStu,

	CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
	END AS VAScore_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
	END AS VAScore_vs_Adj2dp,
	
	CASE Duration	WHEN 1 THEN (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN 'EstPoints_AcYrMin2' ELSE 'EstPoints_AcYrMin1' END)
					ELSE (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN 'EstPoints_AcYrMin3' ELSE 'EstPoints_AcYrMin2' END) ELSE 'EstPoints_AcYrMin1' END) --It is 2 or more years
	END AS HighlightYellow,
	
	CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  --It is 2 or more years
	END AS VAScore_vs_Orig,

	CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS VAScore_vs_Adj,

	--For these below, we may need to reinstate size...
		CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig2dp,

		CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj2dp,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
						ELSE ((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
						ELSE ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj,

	#TempMain.VAScore_L3VAStu / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS VAScore_L3VAStu,
	#TempMain.QOEPoints_College,
	#TempMain.QOEPoints_GCSE_College,
	#TempMain.QOEPoints_Final,
	#TempMain.QOEPoints_GCSE_Final,

	#TempMain.EstPoints_AcYrMin3,
	#TempMain.EstPoints_AcYrMin2,
	#TempMain.EstPoints_AcYrMin1,
	#TempMain.EstPoints_L3VAStu,
	#TempMain.ActPoints_L3VAStu,

	--All the available Enrolment Fields:
	StartDate,
	PlannedEndDate,
	ActualEndDate,
	CompletionID,
	EnrolmentGrade,
	EnrolmentPoints,
	EnrolmentUserDefinedString1,
	EnrolmentUserDefinedString2,
	EnrolmentUserDefinedString3,
	EnrolmentUserDefinedString4,
	EnrolmentUserDefinedNumber,
	EnrolmentUserDefinedDate,
	CourseCode,
	CourseTitle,
	--All the available Student Fields:
	DOB,
	EthnicityCode,
	EthnicityDefinition,
	EthnicityCode + ' - ' + ISNULL(EthnicityDefinition,'') AS Ethnicity, --** 7/7/17 Added
	Gender,
	TutorGroupCode,
	StudentUserDefinedString1,
	StudentUserDefinedString2,
	StudentUserDefinedString3,
	StudentUserDefinedString4,
	StudentUserDefinedNumber,
	StudentUserDefinedDate,
	LLDDandHealthProblemCode,
	LLDDandHealthProblemDefinition,
	LLDDandHealthProblemCode + ' - ' + ISNULL(LLDDandHealthProblemDefinition,'') AS LLDDandHealthProblem, --** 7/7/17 Added
	FreeSchoolMeal,
	(SELECT Completion.[Description] FROM Completion WHERE CompletionID = Completion.ID) AS CompletionDescription,
	Qualification, --**7/7/17 Added
	QualificationCodeandName, --** 7/7/17 Added
	ISNULL(SubjectCode,'') + ' - ' + ISNULL(SubjectName,'') AS SubjectCodeandName, --** 7/7/17 Added
	Point1_Grade,
	Point2_Grade,
	Point3_Grade,
	Point4_Grade,
	Point1_Points,
	Point2_Points,
	Point3_Points,
	Point4_Points,

	--For these below, we may need to reinstate size...
	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE  CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point1_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point1_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN CAST(((Point2_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point2_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point3_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point3_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point4_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point4_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN ((Point1_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point1_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN ((Point2_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point2_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN ((Point3_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point3_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN ((Point4_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point4_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig,
		
	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point1_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point2_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point3_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point4_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point1_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point2_vs_Adj,
	
	CASE Duration	WHEN 1 THEN ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN  EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point3_vs_Adj,
	
	CASE Duration	WHEN 1 THEN ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point4_vs_Adj,

	AgeOn31Aug,

	--The new fields needed now that CA is included:
	CA_LearningAimTitle, --CA Equiv of Qualif Desc
	CA_LearningAimRef, --CA Equiv of WholeQualID
	AB, --Only available for CA
	DC, --Only available for CA
	#TempMain.ABAcronym AS ABAcronym,
	#TempMain.DCName AS DCName,
	#TempMain.DCType AS DCType,
	VA_Type,
	GradeRange,
	--Added so we can work out the census point for w/d enrols
	CASE #TempMain.CompletionID WHEN '3' THEN DATEDIFF(dd, #TempMain.StartDate, #TempMain.ActualEndDate) ELSE NULL END AS WDNumDaysAfterStart, --Only show days for Withdrawn status
	--Added so we can show the current ac yr stats
	/*NEW*/	CAST(#TempMain.EstPoints_AcYr AS DECIMAL(19,2)) AS EstPoints_AcYr2dp,
	/*NEW*/	#TempMain.EstPoints_AcYr AS EstPoints_AcYr,
	/*NEW*/(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYr, #TempMain.Cohort)
	) AS EstGrade_AcYr,
	/*NEW*/(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYr, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYr,
	
	--/*NEW*/ NULL AS VAScore_vs_AcYr2dp,
	CAST(((ActPoints_L3VAStu - EstPoints_AcYr) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS decimal(19,2)) AS VAScore_vs_AcYr2dp,
	((ActPoints_L3VAStu - EstPoints_AcYr) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS VAScore_vs_AcYr,
	
	/*NEW*/ CAST(((EnrolmentPoints - EstPoints_AcYr) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))	AS EnrolmentGradeVAScore_vs_AcYr2dp,
	/*NEW*/ (EnrolmentPoints - EstPoints_AcYr) / Size / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS EnrolmentGradeVAScore_vs_AcYr,
	#TempMain.AcademicYearID AS StudentAcYrID,
	--CASE (SELECT ID FROM CA_LearningAimAcYr_Scope Scope WHERE #TempMain.LearningAimRef = Scope.LearningAimRef AND #TempMain.AcademicYearID = Scope.AcademicYearID) WHEN NULL THEN 'No' ELSE 'Yes' END AS InScope,
	CASE (SELECT VAScope FROM Enrolment WHERE Enrolment.ID = #TempMain.EnrolmentID) WHEN 'CATL' THEN 'Yes' WHEN 'CATC' THEN 'Yes' ELSE 'No' END AS InScope,
	CASE #TempMain.IsGraded WHEN 1 THEN 'Yes' ELSE 'No' END AS IsGraded,
	#TempMain.EnrolmentID,
	CASE WHEN #TempMain.LearningAimRef = #Tempmain.CA_LearningAimRef THEN 'No' ELSE 'Yes' END AS CollegeMapped,
		
	CAST(#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints AS DECIMAL(19,2)) AS MostRecentCollegeEstPoints2dp,
	#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints,
	CAST((((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS VAScore_vs_MostRecent2dp,
	(((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS VAScore_vs_MostRecent,
	CAST((((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS EnrolmentGradeVAScore_vs_MostRecent2dp,
	(((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS EnrolmentGradeVAScore_vs_MostRecent,
	
	CAST((((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point1_vs_MostRecent2dp,
	(((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point1_vs_MostRecent,
	CAST((((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point2_vs_MostRecent2dp,
	(((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point2_vs_MostRecent,
	CAST((((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point3_vs_MostRecent2dp,
	(((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point3_vs_MostRecent,
	CAST((((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point4_vs_MostRecent2dp,
	(((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point4_vs_MostRecent,

		--Most recent InYear Grade fields
	#TempMostRecentInYearPointsGrades.IYMostRecentGrade,
	#TempMostRecentInYearPointsGrades.IYMostRecentPoints,
	
	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE  CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST((((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) ) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) ) / Size)
						ELSE (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) ) / Size) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig,

	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS IYMostRecent_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS IYMostRecent_vs_Adj,

	CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS IYMostRecent_vs_RecentTarget2dp,
	((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS IYMostRecent_vs_RecentTarget,
	IYMostRecentPoint, --the most recent IY Point (e.g. Pt.1, Pt.2)
	#TempMain.MappingInfo,
	#TempMain.CA_QualTypeID,
	(SELECT CA_QualType.QualTypeDescription FROM CA_QualType WHERE CA_QualType.ID = #TempMain.CA_QualTypeID) AS CA_QualTypeDescription,
		#TempMain.TeachingGroupCode,
	StudentUserDefinedString5,
	StudentUserDefinedString6,
	StudentUserDefinedString7,
	StudentUserDefinedString8,
	StudentUserDefinedNumber2,
	EnrolmentUserDefinedString5,
	EnrolmentUserDefinedString6,
	EnrolmentUserDefinedString7,
	EnrolmentUserDefinedString8,
	EnrolmentUserDefinedNumber2,
	CourseUserDefinedString1,
	CourseUserDefinedString2,
	CourseUserDefinedString3,
	CourseUserDefinedString4,
	Point5_Grade,
	Point6_Grade,
	Point7_Grade,
	Point8_Grade,
	Point5_Points,
	Point6_Points,
	Point7_Points,
	Point8_Points,
	CAST(((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point5_vs_MostRecent2dp,
	((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point5_vs_MostRecent,
	CAST(((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point6_vs_MostRecent2dp,
	((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point6_vs_MostRecent,
	CAST(((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point7_vs_MostRecent2dp,
	((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point7_vs_MostRecent,
	CAST(((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point8_vs_MostRecent2dp,
	((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point8_vs_MostRecent,
	(SELECT LearningAim.NotionalNVQLevel FROM LearningAim WHERE LearningAim.LearningAimRef = #TempMain.LearningAimRef) AS NVQLevel,
	#TempMain.Point1_Notes, 
	#TempMain.Point2_Notes, 
	#TempMain.Point3_Notes, 
	#TempMain.Point4_Notes, 
	#TempMain.Point5_Notes, 
	#TempMain.Point6_Notes, 
	#TempMain.Point7_Notes, 
	#TempMain.Point8_Notes,
	NULL AS OfqualGradingScheme,
	MostRecentNationalDataYear,
	#TempMain.PersonalTargetGrade,
	#TempMain.OutcomeID,
	#TempMain.OutcomeDescription,
	#TempMain.TeachingGroupTitle,
	(SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) AS IYMostRecentGradeNo, --v1.28
	(SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) AS MostRecentCollegeEstGradeNo, --v1.28
	
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) > (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS MostRecentBelowTarget,
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) < (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS MostRecentAboveTarget,
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) = (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS MostRecentAtTarget,

	#TempMain.Point1_EffortDescription,
	#TempMain.Point2_EffortDescription,
	#TempMain.Point3_EffortDescription,
	#TempMain.Point4_EffortDescription,
	#TempMain.Point5_EffortDescription,
	#TempMain.Point6_EffortDescription,
	#TempMain.Point7_EffortDescription,
	#TempMain.Point8_EffortDescription,
	(SELECT AcademicYearID FROM #TempEnrolmentFrozenTargets WHERE #TempEnrolmentFrozenTargets.ID = #TempMain.ID) AS TargetFrozenAcademicYearID,
	Point9_Grade,
	Point10_Grade,
	Point11_Grade,
	Point12_Grade,
	Point9_Points,
	Point10_Points,
	Point11_Points,
	Point12_Points,
	CAST(((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point9_vs_MostRecent2dp,
	((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point9_vs_MostRecent,
	CAST(((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point10_vs_MostRecent2dp,
	((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point10_vs_MostRecent,
	CAST(((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) /Size ) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point11_vs_MostRecent2dp,
	((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point11_vs_MostRecent,
	CAST(((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point12_vs_MostRecent2dp,
	((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point12_vs_MostRecent,
	#TempMain.Point9_Notes, 
	#TempMain.Point10_Notes, 
	#TempMain.Point11_Notes, 
	#TempMain.Point12_Notes,
	#TempMain.Point9_EffortDescription,
	#TempMain.Point10_EffortDescription,
	#TempMain.Point11_EffortDescription,
	#TempMain.Point12_EffortDescription,
	NULL AS IYMostRecent_vs_RecentTarget_NationalBanding,
	NULL AS EnrolmentGradeVAScore_vs_MostRecent_NationalBanding,

	(SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints, #TempMain.[CA_Type])) AS EnrolmentGradeNo, --v1.34
	
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, MostRecentCollegeEstPoints , #TempMain.[CA_Type])) < (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS EnrolmentGradeBelowTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, MostRecentCollegeEstPoints , #TempMain.[CA_Type])) > (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS EnrolmentGradeAboveTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, MostRecentCollegeEstPoints , #TempMain.[CA_Type])) = (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS EnrolmentGradeAtTarget,  --v1.34

	(SELECT Count(vStudentEntryLearningAim.EntryLearningAimRef) 
	FROM vStudentEntryLearningAim 
	INNER JOIN EntryLearningAim ON vStudentEntryLearningAim.EntryLearningAimRef = EntryLearningAim.EntryLearningAimRef
	INNER JOIN EntryLearningAimType ON EntryLearningAim.EntryLearningAimTypeID = EntryLearningAimType.ID
	INNER JOIN EntryLearningAimTypeGrade ON EntryLearningAimType.ID = EntryLearningAimTypeGrade.EntryLearningAimTypeID
	WHERE vStudentEntryLearningAim.Grade = LTRIM(RTRIM(EntryLearningAimTypeGrade.Grade))
	AND EntryLearningAimType.IsObsolete = 0
	AND vStudentEntryLearningAim.StudentID = #TempMain.StudentID
	) AS CountOfMappedQOE--v1.36

	, (SELECT #Temp_Enrol_CollegeStructure.CollegeStructure FROM #Temp_Enrol_CollegeStructure WHERE #Temp_Enrol_CollegeStructure.ID = #TempMain.ID) AS CollegeStructure --v1.36

FROM
	#TempMain
	LEFT JOIN #TempMostRecentCollegeEstPoints
	ON #TempMain.ID = #TempMostRecentCollegeEstPoints.ID
	LEFT JOIN #TempMostRecentInYearPointsGrades
	ON #TempMain.ID = #TempMostRecentInYearPointsGrades.ID


GO



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



--drop table #TempQOEPointsAll
--drop table #TempQOEPointsGCSEOnly
--drop table #TempMain
ALTER Procedure [sp_Student_Est_Act_VA]

 @AcademicYearID AS VARCHAR(5),
 @UseEnrolmentWebSave AS BIT = 0,
 @UserName AS VARCHAR(255) = NULL

AS 

-- =============================================
-- Author:		Andrew Genner
-- Create date: 07/03/2017
-- Description:	Present the Estimated Points and Grades 
-- alongside the Uplifted Grades and L3VA Scores with 
-- all Student and Enrolment Fields to Filter on.
------------------------------------------------
-- Modified:	AMG 11/07/2017 v1.1
-- Include the extra fields needed for populating the EstActVA to do the enhanced grouping analysis
-- Modified:	AMG 19/10/2017 v1.2.0.0
-- When setting HighlightPurple, the duration could be >2, so replace "WHEN 2" with ELSE.
-- =============================================
-- Modified:	AMG 13/12/2017 v1.3.0
-- Included the InYearGrade fields
-- =============================================
-- Modified 06/03/2018
-- Added new fields - EstPoints_AcYr2dp, EstGrade_AcYr, EstGradeInflated_AcYr, VAScore_vs_AcYr, EnrolmentGradeVAScore_vs_AcYr
-- =============================================
-- Modified:	AMG 28/04/2018 v1.4.0
-- Added the #TempMostRecentCollegeEstPoints temp table in - this is so we can show colunms of most recent VA
-- When 2pd fields are shown, these are in the columns.  The non-2dp fields are used for the Totals/Avgs.  The 2dp columns are NOT /10
-- The non-2dp fields are /10 (otherwise the totals don't work).
-- =============================================
-- Modified:	AMG 10/06/2018 v1.5.0
-- If the InYearGrade is Null and the enrolment is withdrawn, set grade to U and zero points
-- Take the VAScope from the Enrolment table
-- =============================================
-- Modified AMG 17/07/2018 v1.6.0
-- Added in QCG.AltGrade2
-- Modified AMG 04/09/2018 v1.6.0
-- InScope - Added APPG to CASE statement
-- =============================================
-- Modified AMG 01/10/2018 v1.7.0
-- Corrected some CASE Staements to CASE WHEN x IS NULL
-- Added New field MappingInfo - to indicate if record is mapped using the College Generic Headline figure
-- =============================================
-- Modified AMG 01/03/2018 v1.8.0
-- Added CA_TypeID so sp_EstAct_Grouping can use it
-- =============================================
-- Modified AMG 27/12/2018 v1.9.0
-- Added new Pointsfrom1718 the #TempQOE.. selects to cater for picking the QOE pointsfrom1718 >=2017
-- and modifed the calls to dbo.fn_calculatePoints - to pass the pointsfrom1718 though for national data from AcYr1718
-- Also, modified the QOE points shown to be the new Pointsfrom1718 from AcYr 18/19 onwards
-- =============================================
-- Modified AMG 04/06/2019 v1.13.0
-- Added New Student, Enrolment, Course UDFs and TeachingGroupCode
-- =============================================
-- Modified AMG 24/06/2019 v1.14.0
-- Added QOE precalculated points
-- EstPoints_AcYrMin3 - when we have more than 3 years national data, for AcYrMin3 we want to find the most recent available data - not just AcYr-3
-- =============================================
-- Modified AMG 01/07/2019 v1.14.0
-- Added InYear Points 5 - 8 and all the extra fields that entails.
-- =============================================
-- Modified AMG 30/09/2019 v1.15.0
-- Max and Min Grade problem - added a TOP(1) to prevent future problems - Base data has also been fixed to avoid multiple Min and Max grades being returned
-- =============================================
-- Modified AMG 19/01/2020 v1.18.0
-- Where Clause for CA_LearningAimRef - now tests for empty string and NULLs - more robust
-- =============================================
-- Modified AMG 30/01/2020 v1.19.0
-- HighlightPurpl, HighlightYellow - removed the 2dp from the fields as these are not used by the GUI
-- =============================================
-- Modified AMG 14/02/2020 v1.20.0
-- Added in fn_ConvertNewQOEPointstoOldQOEPoints - so we can convert new to old QOE points so we can use National Data for predictive grades in 16/17 and 15/16
-- =============================================
-- Modified AMG 03/04/2020 v1.21.0
-- Added in NVQLevel
-- =============================================
-- Modified AMG 24/04/2020 v1.22.0
-- Added in @UseEnrolmentWebSave and @UserName optional parameters.
-- Introduced the tabel #TempEnrolment.  This is populated with all enrolments, OR, if @EnrolmentWebSave is true, just the few we are saving via the web
-- Changed the way InYearGrade is joined.  We now have InYearGrade.LearningAimRef populated by the Web.  So we pull IYGrades into this SP by matching on LearningAimref + Course
-- If we can't match on LearningAimRef+Course, we just link on Course (as we used to).  Got rid of automatically setting IY points to 0 if enrol is Withdrawn.
-- Added InYearGrade Notes 1-8, PersonalTargetGrade
-- Added MostRecentNationalDataYear
-- Added OutcomeID, OutcomeDescription, TeachingGroupTitle
-- =============================================
-- Modified AMG 12/10/2020 v1.25.0
-- Simplified SQL to work out MostRecentNationalDataYear
-- =============================================
-- Modified AMG 23/11/2020 v1.26
-- Data now comes from vStudentEntryLearningAim rather than StudentEntryLearningAim
-- =============================================
-- Modified AMG 06/04/2021 v1.28
-- Added the IYMostRecentGradeNo, MostRecentCollegeEstGradeNo, MostRecentBelowTarget, MostRecentAboveTarget, MostRecentAtTarget fields for better reporting purposes
-- =============================================
-- Modified AMG 16/07/2021 v1.29
-- Added 8 new InYearGradeEffort Description fields varchar(100)
-- =============================================
-- Modified AMG 01/11/2021 v1.30
-- Added functionality for multi-year enrols on the same learning aim, so target grades in year 1 are used for frozen for subsequent years
-- Added TargetFrozenAcademicYearID
-- When calculating MostRecentNationalDataYear, added in AND AcademicYear.AcademicYearNo < @AcademicYearNo
-- =============================================
-- Modified AMG 13/06/2022 v1.32
-- Added InYear Points 9 - 12
-- Add in National Progress Banding
-- Added in IYMostRecent_vs_RecentTarget_NationalBanding and EnrolmentGradeVAScore_vs_MostRecent_NationalBanding
-- =============================================
-- Modified AMG 09/12/2022 v1.33
-- swapped the coalesce over to select grade first, then altgrade
-- =============================================
-- Modified AMG 24/01/2023 v1.34
-- Added EnrolmentGradeNo, EnrolmentGradeBelowTarget, EnrolmentGradeAboveTarget, EnrolmentGradeAtTarget
-- =============================================
-- Modified AMG 03/07/2023 v1.35
-- If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
-- Altered PersonalTargetGrade to VARCHAR(255)
-- =============================================
-- Modified AMG 31/10/2023 v1.36
-- Added CountOfMappedQOE
-- Added CollegeStructure
-- =============================================
-- Modified AMG 29/04/2024 v1.38
-- changed Stu and Enrol Num UDFs back to decimal(19,2) - not varchar(30)
-- =============================================

--DECLARE @AcademicYearID CHAR(5)
--SELECT @AcademicYearID = '17/18'

DECLARE @AcademicYearNo INTEGER
SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID

--Calculate the AcademicYear from where we are going to pull the National Progress Data
DECLARE @AcademicYearID_NationalProgress VARCHAR(5)
SELECT @AcademicYearID_NationalProgress = (
											SELECT MAX(NationalProgress.AcademicYearID) 
											FROM NationalProgress 
											INNER JOIN AcademicYear 
												ON NationalProgress.AcademicYearID = AcademicYear.AcademicYearID
											WHERE AcademicYear.AcademicYearNo <= @AcademicYearNo
										)

	CREATE TABLE #TempEnrolment (ID INTEGER NOT NULL) --Used to populate #TempMain
	--Similarly, if we are only saving a few enrolments, populate #TempEnrolment with just a few, else, populate all of them...
	IF @UseEnrolmentWebSave = 1 
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		INNER JOIN EnrolmentWebSave 
		ON Enrolment.ID = EnrolmentWebSave.EnrolmentID
		WHERE Enrolment.QualificationID IS NOT NULL 
		AND EnrolmentWebSave.UserName = @UserName
		AND NOT EXISTS (SELECT ID FROM EstActVA WHERE EstActVA.ID = Enrolment.ID)
	END
	ELSE
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		WHERE Enrolment.QualificationID IS NOT NULL 
		AND Enrolment.AcademicYearID = @AcademicYearID
	END

	--Now get a list of all of the Students we need - used for QOE
	SELECT DISTINCT
		Enrolment.StudentID AS ID
	INTO
		#TempStudent
	FROM
		#TempEnrolment
	INNER JOIN Enrolment
	ON #TempEnrolment.ID = Enrolment.ID
	

--Get the QOE Points (GCSE Only) for Students in this AcYr
			SELECT 
				S.ID, 
				CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPointsGCSEOnly, --Avg(ELATG.Points/Volume) AS QOEPointsGCSEOnly
				CASE SUM(ELATG.volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsGCSEOnlyfrom1718 
			INTO
				#TempQOEPointsGCSEOnly
			FROM 
				EntryLearningAimTypeGrade ELATG
				INNER JOIN EntryLearningAimType ELAT
				ON ELATG.EntryLearningAimTypeID = ELAT.ID
					INNER JOIN EntryLearningAim ELA
					ON ELAT.ID = ELA.EntryLearningAimTypeID
						INNER JOIN vStudentEntryLearningAim SELA
						ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
							INNER JOIN #TempStudent S
							ON S.ID = SELA.StudentID
			AND ELATG.Grade = SELA.Grade
			AND ELAT.GCSE = 1 --GCSE
			--AND S.AcademicYearID = @AcademicYearID
			GROUP BY S.ID
		
--Get the QOE Points (All) for Students in this AcYr
			SELECT 
				S.ID,  
				CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPoints,--Avg(ELATG.Points/Volume) AS QOEPoints
				CASE SUM(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsfrom1718
			INTO
				#TempQOEPointsAll
			FROM 
				EntryLearningAimTypeGrade ELATG
				INNER JOIN EntryLearningAimType ELAT
				ON ELATG.EntryLearningAimTypeID = ELAT.ID
					INNER JOIN EntryLearningAim ELA
					ON ELAT.ID = ELA.EntryLearningAimTypeID
						INNER JOIN vStudentEntryLearningAim SELA
						ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
							INNER JOIN #TempStudent S
							ON S.ID = SELA.StudentID
			AND ELATG.Grade = SELA.Grade
			--AND S.AcademicYearID = @AcademicYearID
			GROUP BY S.ID

			--Newly added for v1.14 (AMG 24/06/2019)
			--If the pre-calculated Points have been imported, this is where we add them in (where there are no imported QOEs)...
			IF @AcademicYearNo < 2018 
			BEGIN
				INSERT #TempQOEPointsGCSEOnly (ID, QOEPointsGCSEOnly, QOEPointsGCSEOnlyfrom1718)
				SELECT SELAP.StudentID, SELAP.QOEPointsGCSEOnly, NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsGCSEOnly WHERE #TempQOEPointsGCSEOnly.ID = SELAP.StudentID)

				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, SELAP.QOEPointsAll, NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END
			ELSE
			BEGIN
				INSERT #TempQOEPointsGCSEOnly (ID, QOEPointsGCSEOnly, QOEPointsGCSEOnlyfrom1718)
				SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsGCSEOnly), SELAP.QOEPointsGCSEOnly --fn replaces NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsGCSEOnly WHERE #TempQOEPointsGCSEOnly.ID = SELAP.StudentID)

				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), SELAP.QOEPointsAll--fn replaces NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END

			--get the system setting to decide if we are over-riding the Student QOEs with precalculated points
			DECLARE @SystemSetting AS Bit
			SELECT @SystemSetting = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 5)

			--If the setting is true, we want to over-write imported QOEs with precalculated QOE points where they exist.
			IF @SystemSetting = 1 AND @AcademicYearNo >= 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsGCSEOnly SET QOEPointsGCSEOnly = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsGCSEOnly), QOEPointsGCSEOnlyfrom1718 = SELAP.QOEPointsGCSEOnly--fn replaces NULL
					FROM #TempQOEPointsGCSEOnly INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsGCSEOnly.ID = SELAP.StudentID

					UPDATE #TempQOEPointsAll SET QOEPoints = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), QOEPointsfrom1718 = SELAP.QOEPointsAll--fn replaces NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END
			IF @SystemSetting = 1 AND @AcademicYearNo < 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsGCSEOnly SET QOEPointsGCSEOnly = SELAP.QOEPointsGCSEOnly, QOEPointsGCSEOnlyfrom1718 = NULL
					FROM #TempQOEPointsGCSEOnly INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsGCSEOnly.ID = SELAP.StudentID

					UPDATE #TempQOEPointsAll SET QOEPoints = SELAP.QOEPointsAll, QOEPointsfrom1718 = NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END

--College Structure --New for v1.36 (05/12/2023)
DECLARE @FieldName AS VARCHAR(50)= ''
SELECT @FieldName = COALESCE(
					RIGHT(SystemSettingValue.SystemSettingValue,CHARINDEX('|',REVERSE(SystemSettingValue.SystemSettingValue))-1),
					RIGHT(SystemSettingValue.DefaultValue,CHARINDEX('|',REVERSE(SystemSettingValue.DefaultValue))-1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'
DECLARE @TableName AS VARCHAR(50) = ''
SELECT @TableName = COALESCE(
					LEFT(SystemSettingValue.SystemSettingValue, CHARINDEX('|', SystemSettingValue.SystemSettingValue + '|') - 1),
					LEFT(SystemSettingValue.DefaultValue, CHARINDEX('|', SystemSettingValue.DefaultValue + '|') - 1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'

CREATE TABLE #Temp_Enrol_CollegeStructure( [ID] [int] NOT NULL, CollegeStructure [varchar](255) NULL)

DECLARE @CollegeStructureSQL AS VARCHAR(MAX) = ''
IF @TableName = 'Enrolment' 
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Enrolment.' + @FieldName + ' AS CollegeStructure FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID'
END

IF @TableName = 'Course'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Course.' + @FieldName + ' AS CollegeStructure 
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Course ON Course.ID = Enrolment.CourseID'
END

IF @TableName = 'Student'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Student.' + @FieldName + ' AS CollegeStructure  
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Student ON Student.ID = Enrolment.StudentID'
END
EXEC(@CollegeStructureSQL)

--End of College Structure



--In Year Grades - firstly, pick all that match on Course and LAim
CREATE TABLE  #TempIYGradeEnrolment
(ID INT NOT NULL, Point1_Grade VARCHAR(20) NULL, Point2_Grade VARCHAR(20) NULL, Point3_Grade VARCHAR(20) NULL, Point4_Grade VARCHAR(20) NULL, 
		Point5_Grade VARCHAR(20) NULL, Point6_Grade VARCHAR(20) NULL, Point7_Grade VARCHAR(20) NULL, Point8_Grade VARCHAR(20) NULL,
		Point9_Grade VARCHAR(20) NULL, Point10_Grade VARCHAR(20) NULL, Point11_Grade VARCHAR(20) NULL, Point12_Grade VARCHAR(20) NULL,
		Point1_Points DECIMAL(19,2) NULL, Point2_Points DECIMAL(19,2) NULL, Point3_Points DECIMAL(19,2) NULL, Point4_Points DECIMAL(19,2) NULL, 
		Point5_Points DECIMAL(19,2) NULL, Point6_Points DECIMAL(19,2), Point7_Points DECIMAL(19,2), Point8_Points DECIMAL(19,2),
		Point9_Points DECIMAL(19,2) NULL, Point10_Points DECIMAL(19,2), Point11_Points DECIMAL(19,2), Point12_Points DECIMAL(19,2),
		Point1_Notes VARCHAR(1024) NULL, Point2_Notes VARCHAR(1024) NULL, Point3_Notes VARCHAR(1024) NULL, Point4_Notes VARCHAR(1024) NULL, 
		Point5_Notes VARCHAR(1024) NULL, Point6_Notes VARCHAR(1024) NULL, Point7_Notes VARCHAR(1024) NULL, Point8_Notes VARCHAR(1024) NULL, 
		Point9_Notes VARCHAR(1024) NULL, Point10_Notes VARCHAR(1024) NULL, Point11_Notes VARCHAR(1024) NULL, Point12_Notes VARCHAR(1024) NULL, PersonalTargetGrade VARCHAR(255) NULL,
		Point1_EffortDescription VARCHAR(100) NULL, Point2_EffortDescription VARCHAR(100) NULL, Point3_EffortDescription VARCHAR(100) NULL,
		Point4_EffortDescription VARCHAR(100) NULL, Point5_EffortDescription VARCHAR(100) NULL, Point6_EffortDescription VARCHAR(100) NULL,
		Point7_EffortDescription VARCHAR(100) NULL, Point8_EffortDescription VARCHAR(100) NULL, Point9_EffortDescription VARCHAR(100) NULL, 
		Point10_EffortDescription VARCHAR(100) NULL, Point11_EffortDescription VARCHAR(100) NULL, Point12_EffortDescription VARCHAR(100) NULL)

INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade, 
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points, 
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is a 0 points automatically
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point1_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point1_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point1_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade)
	--END) 
	END) AS Point1_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point2_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point2_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point2_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade)
	--END)
	END) AS Point2_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point3_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point3_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point3_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade)
	--END)
	END) AS Point3_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point4_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point4_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point4_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade)
	--END)
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point5_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point5_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point5_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade)
	--END)
	END) AS Point5_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point6_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point6_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point6_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade)
	--END)
	END) AS Point6_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point7_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point7_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point7_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade)
	--END)
	END) AS Point7_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point8_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point8_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point8_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade)
	--END)
	END) AS Point8_Points,

	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point9_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point9_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point9_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade)
	END) AS Point9_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point10_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point10_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point10_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade)
	END) AS Point10_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point11_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point11_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point11_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade)
	END) AS Point11_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point12_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point12_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point12_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade)
	END) AS Point12_Points,
	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point9_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point10_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point11_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point12_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
			AND InYearGrade.LearningAimRef = Enrolment.LearningAimRef
			INNER JOIN QualificationLookup 
				ON QualificationLookup.ID = Enrolment.QualificationID
				INNER JOIN QualificationCodeLookup
					ON QualificationCodeLookup.ID = QualificationLookup.QualificationCodeID

--Now, for any that don't match, just match on Course
INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points,
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is a 0 points automatically
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point1_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point1_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point1_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade)
	--END) 
	END) AS Point1_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point2_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point2_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point2_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade)
	--END)
	END) AS Point2_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point3_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point3_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point3_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade)
	--END)
	END) AS Point3_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point4_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point4_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point4_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade)
	--END)
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point5_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point5_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point5_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade)
	--END)
	END) AS Point5_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point6_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point6_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point6_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade)
	--END)
	END) AS Point6_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point7_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point7_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point7_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade)
	--END)
	END) AS Point7_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point8_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point8_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point8_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade)
	--END)
	END) AS Point8_Points,

	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point9_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point9_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point9_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade)
	END) AS Point9_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point10_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point10_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point10_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade)
	END) AS Point10_Points,
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point11_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point11_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point11_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade)
	END) AS Point11_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point12_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point12_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point12_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade)
	END) AS Point12_Points,
	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN		(SELECT * FROM InYearGrade --We need to do this just in case we end up with records with unmatched LAims, so we could have "duplicate" IYG records
						INNER JOIN (SELECT Max(ID) AS MaxID FROM InYearGrade GROUP BY AcademicYearID, StudentID, CourseID) T
						ON InYearGrade.ID = T.MaxID) InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
		--INNER JOIN InYearGrade
		--	ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
		--	AND InYearGrade.StudentID = Enrolment.StudentID
		--	AND InYearGrade.CourseID = Enrolment.CourseID
			INNER JOIN QualificationLookup 
				ON QualificationLookup.ID = Enrolment.QualificationID
				INNER JOIN QualificationCodeLookup
					ON QualificationCodeLookup.ID = QualificationLookup.QualificationCodeID
WHERE NOT EXISTS (SELECT #TempIYGradeEnrolment.ID FROM #TempIYGradeEnrolment WHERE #TempIYGradeEnrolment.ID = #TempEnrolment.ID)


	
--Get the core information for the procedure...		
SELECT 

	Enrolment.ID,
	Enrolment.AcademicYearID, 
	Student.StudentRef, Student.Surname, Student.Forenames, 
	Student.ID AS StudentID,
	Enrolment.LearningAimRef, LearningAim.LearningAimRefTitle AS LearningAimTitle,
	QualificationLookup.QualificationDescription, 
	QualificationLookup.WholeQualID,
	QualificationLookup.WholeQualID AS Qualification,
	QualificationCodeLookup.Size,
	QualificationLookup.ID AS QualificationID,

	CASE WHEN Enrolment.StartDate IS NULL THEN 1 --This is a bit belt and braces because the StartDate should NEVER be NULL, but so much relies on this!
	ELSE
	(CAST('20' + SUBSTRING(Enrolment.AcademicYearID,1,2) AS INT) - dbo.GetAcStartYearFromDate (Enrolment.StartDate) ) + 1
	END AS Duration, --should maybe rename to "Num AcYrs spanned" NumAcYrSpan - (or Num AcYrs appears in)
	Cohortlookup.CohortName AS Cohort, --**AMG 7/7/17

	CASE WHEN CohortLookup.CohortName IN ('Applied General', 'None') THEN (CASE WHEN @AcademicYearNo>=2018 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) ELSE NULL END AS QOEPoints_College,--Vocational
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN (CASE WHEN @AcademicYearNo>=2018 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END) ELSE NULL END AS QOEPoints_GCSE_College,--Academic

	CASE WHEN CohortLookup.CohortName IN ('Applied General', 'None') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_Final, --Vocational
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_GCSE_Final, --Academic

	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	--28/06/2019 - in preparation for more than 3 years national data, look for the academic year with data 3 or more years old - whatever is the most recent.
	--AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3
	AND QAY.QualificationID = QualificationLookup.ID
    AND A.AcademicYearNo =
              (SELECT --find the max academicyearnumber for the QAY record older or equal to 3 years ago (i.e. if we are in 18/19, does it appear in 15/16 or 14/15 or 13/14 etc.)
              Max(AcademicYearNo) 
              FROM AcademicYear A
              INNER JOIN QualificationAcYr QAY1 ON QAY1.AcademicYearID = A.AcademicYearID
              AND A.AcademicYearNo <= (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3 --the max year equal to or older than 3 years ago
              AND QAY1.QualificationID = QualificationLookup.ID
              )
	) AS EstPoints_AcYrMin3,

	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 2
	AND QAY.QualificationID = QualificationLookup.ID
	) AS EstPoints_AcYrMin2,

	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 1
	AND QAY.QualificationID = QualificationLookup.ID
	) AS EstPoints_AcYrMin1,

	--NEW:
	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID)
	AND QAY.QualificationID = QualificationLookup.ID
	) AS EstPoints_AcYr,

	(SELECT AcademicYear.AcademicYearID 
		FROM AcademicYear
		INNER JOIN (SELECT MAX(AcademicYearNo) AS MAXAcademicYearNo FROM QualificationAcYr QAY INNER JOIN AcademicYear ON QAY.AcademicYearID = AcademicYear.AcademicYearID WHERE QAY.QualificationID = QualificationLookup.ID AND AcademicYear.AcademicYearNo < @AcademicYearNo) T
		ON T.MAXAcademicYearNo = AcademicYear.AcademicYearNo) AS MostRecentNationalDataYear,

	L3VAStudent.EstimatedPoints AS EstPoints_L3VAStu,
	L3VAStudent.ActualPoints AS ActPoints_L3VAStu,
	L3VAStudent.ValueAddedScore AS VAScore_L3VAStu,

	--All the available Enrolment Fields:
	Enrolment.StartDate,
	Enrolment.PlannedEndDate,
	Enrolment.ActualEndDate,
	Enrolment.CompletionID,
	Enrolment.Grade AS EnrolmentGrade,
	--To calculate enrolment points, If we can't make a match with QCG.Grade, then try with QCG.AltGrade
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = Enrolment.Grade) IS NULL
	THEN
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = Enrolment.Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = Enrolment.Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = Enrolment.Grade)
		END)
	ELSE
	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = Enrolment.Grade)
	END
	 ) AS EnrolmentPoints,
	Enrolment.UserDefinedString1 AS EnrolmentUserDefinedString1,
	Enrolment.UserDefinedString2 AS EnrolmentUserDefinedString2,
	Enrolment.UserDefinedString3 AS EnrolmentUserDefinedString3,
	Enrolment.UserDefinedString4 AS EnrolmentUserDefinedString4,
	Enrolment.UserDefinedNumber AS EnrolmentUserDefinedNumber,
	Enrolment.UserDefinedDate AS EnrolmentUserDefinedDate,
	Enrolment.UserDefinedString5 AS EnrolmentUserDefinedString5,
	Enrolment.UserDefinedString6 AS EnrolmentUserDefinedString6,
	Enrolment.UserDefinedString7 AS EnrolmentUserDefinedString7,
	Enrolment.UserDefinedString8 AS EnrolmentUserDefinedString8,
	Enrolment.UserDefinedNumber2 AS EnrolmentUserDefinedNumber2,
	Enrolment.TeachingGroupCode,
	Course.CourseCode, --**OK 7/7/17
	Course.Title AS CourseTitle, --**OK 7/7/17
	Course.UserDefinedString1 AS CourseUserDefinedString1, 
	Course.UserDefinedString2 AS CourseUserDefinedString2,
	Course.UserDefinedString3 AS CourseUserDefinedString3,
	Course.UserDefinedString4 AS CourseUserDefinedString4,
	--All the available Student Fields:
	Student.DOB,
	Ethnicity.Code As EthnicityCode,
	Ethnicity.[Definition] AS EthnicityDefinition,
	Student.Gender,
	Student.TutorGroupCode,
	Student.UserDefinedString1 AS StudentUserDefinedString1, 
	Student.UserDefinedString2 AS StudentUserDefinedString2,
	Student.UserDefinedString3 AS StudentUserDefinedString3,
	Student.UserDefinedString4 AS StudentUserDefinedString4,
	Student.UserDefinedNumber AS StudentUserDefinedNumber, 
	Student.UserDefinedString5 AS StudentUserDefinedString5, 
	Student.UserDefinedString6 AS StudentUserDefinedString6,
	Student.UserDefinedString7 AS StudentUserDefinedString7,
	Student.UserDefinedString8 AS StudentUserDefinedString8,
	Student.UserDefinedNumber2  AS StudentUserDefinedNumber2,
	Student.UserDefinedDate AS StudentUserDefinedDate,
	LLDDandHealthProblem.Code AS LLDDandHealthProblemCode,
	LLDDandHealthProblem.[Definition] AS LLDDandHealthProblemDefinition,
	Student.FreeSchoolMeal,
	QualificationCodeLookup.ID AS QualifcationCodeLookupID,
	QualificationCodeLookup.GradeBoundaryInflation,
	ISNULL(QualificationCodeLookup.QualificationCode,'') + ' - ' + ISNULL(QualificationCodeLookup.QualificationCodeDescription,'') AS QualificationCodeandName,
	(SELECT SL.SubjectCode FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectCode, --** 7/7/17 Added
	(SELECT SL.SubjectName FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectName, --** 7/7/17 Added

	#TempIYGradeEnrolment.Point1_Grade,
	#TempIYGradeEnrolment.Point2_Grade,
	#TempIYGradeEnrolment.Point3_Grade,
	#TempIYGradeEnrolment.Point4_Grade,
	#TempIYGradeEnrolment.Point5_Grade,
	#TempIYGradeEnrolment.Point6_Grade,
	#TempIYGradeEnrolment.Point7_Grade,
	#TempIYGradeEnrolment.Point8_Grade,
	#TempIYGradeEnrolment.Point9_Grade,
	#TempIYGradeEnrolment.Point10_Grade,
	#TempIYGradeEnrolment.Point11_Grade,
	#TempIYGradeEnrolment.Point12_Grade,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 'U' ELSE InYearGrade.Point1_Grade END) AS Point1_Grade, --If enrolment is withdrawn, it is a U automatically
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 'U' ELSE InYearGrade.Point2_Grade END) AS Point2_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 'U' ELSE InYearGrade.Point3_Grade END) AS Point3_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 'U' ELSE InYearGrade.Point4_Grade END) AS Point4_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 'U' ELSE InYearGrade.Point5_Grade END) AS Point5_Grade, --Added 01/07/2019
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 'U' ELSE InYearGrade.Point6_Grade END) AS Point6_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 'U' ELSE InYearGrade.Point7_Grade END) AS Point7_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 'U' ELSE InYearGrade.Point8_Grade END) AS Point8_Grade,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is a 0 points automatically
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point1_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point1_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point1_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade)
	--END) 
	--END) AS Point1_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point2_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point2_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point2_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade)
	--END)
	--END) AS Point2_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point3_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point3_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point3_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade)
	--END)
	--END) AS Point3_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point4_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point4_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point4_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade)
	--END)
	--END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point5_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point5_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point5_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade)
	--END)
	--END) AS Point5_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point6_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point6_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point6_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade)
	--END)
	--END) AS Point6_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point7_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point7_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point7_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade)
	--END)
	--END) AS Point7_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point8_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point8_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point8_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade)
	--END)
	--END) AS Point8_Points,
	#TempIYGradeEnrolment.Point1_Points, 
	#TempIYGradeEnrolment.Point2_Points, 
	#TempIYGradeEnrolment.Point3_Points, 
	#TempIYGradeEnrolment.Point4_Points, 
	#TempIYGradeEnrolment.Point5_Points, 
	#TempIYGradeEnrolment.Point6_Points, 
	#TempIYGradeEnrolment.Point7_Points, 
	#TempIYGradeEnrolment.Point8_Points,
	#TempIYGradeEnrolment.Point9_Points, 
	#TempIYGradeEnrolment.Point10_Points, 
	#TempIYGradeEnrolment.Point11_Points, 
	#TempIYGradeEnrolment.Point12_Points,
	#TempIYGradeEnrolment.Point1_Notes, 
	#TempIYGradeEnrolment.Point2_Notes, 
	#TempIYGradeEnrolment.Point3_Notes, 
	#TempIYGradeEnrolment.Point4_Notes, 
	#TempIYGradeEnrolment.Point5_Notes, 
	#TempIYGradeEnrolment.Point6_Notes, 
	#TempIYGradeEnrolment.Point7_Notes, 
	#TempIYGradeEnrolment.Point8_Notes,
	#TempIYGradeEnrolment.Point9_Notes, 
	#TempIYGradeEnrolment.Point10_Notes, 
	#TempIYGradeEnrolment.Point11_Notes, 
	#TempIYGradeEnrolment.Point12_Notes,
	#TempIYGradeEnrolment.PersonalTargetGrade,

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = Student.AcademicYearID ) + '0831' AS DateTime),
	Student.DOB
	)) AS AgeOn31Aug,
	--Get the min and max grade so we can show the grade range...
	--v1.33 swapped the coalesce over to select grade first, then altgrade
	(SELECT TOP(1) COALESCE(QualificationCodeGradeLookup.Grade,QualificationCodeGradeLookup.AltGrade) AS Grade FROM QualificationCodeGradeLookup WHERE QualificationCodeGradeLookup.Points = 
		(SELECT Min(Points) AS MinPoints FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID)
	AND QualificationCodeGradeLookup.QualificationCodeID = QualificationCodeLookup.ID
	) AS MinGrade,
	--v1.33 swapped the coalesce over to select grade first, then altgrade
	(SELECT TOP(1) COALESCE(QualificationCodeGradeLookup.Grade,QualificationCodeGradeLookup.AltGrade) AS Grade FROM QualificationCodeGradeLookup WHERE QualificationCodeGradeLookup.Points = 
		(SELECT Max(Points) AS MaxPoints FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID)
	AND QualificationCodeGradeLookup.QualificationCodeID = QualificationCodeLookup.ID
	) AS MaxGrade,
	QAN.AB,
	QAN.DC,
	(SELECT ABAcronym FROM QAN_AB WHERE QAN_AB.AB = QAN.AB) AS ABAcronym,
	(SELECT DCName FROM QAN_DC WHERE QAN_DC.DC = QAN.DC) AS DCName,
	CAST((SELECT Map FROM QAN_DC WHERE QAN_DC.DC = QAN.DC) AS VARCHAR(4)) AS DCType,
	Enrolment.ID AS EnrolmentID,
	Enrolment.MappingInfo,
	Enrolment.OutcomeID,
	(CASE Enrolment.OutcomeID WHEN 1 THEN 'Achieved' WHEN 2 THEN 'Partial Ach.' WHEN 3 THEN 'Not Achieved' WHEN 8 THEN 'Not Known' ELSE NULL END) AS OutcomeDescription,
	Enrolment.TeachingGroupTitle,
	#TempIYGradeEnrolment.Point1_EffortDescription,
	#TempIYGradeEnrolment.Point2_EffortDescription,
	#TempIYGradeEnrolment.Point3_EffortDescription,
	#TempIYGradeEnrolment.Point4_EffortDescription,
	#TempIYGradeEnrolment.Point5_EffortDescription,
	#TempIYGradeEnrolment.Point6_EffortDescription,
	#TempIYGradeEnrolment.Point7_EffortDescription,
	#TempIYGradeEnrolment.Point8_EffortDescription,
	#TempIYGradeEnrolment.Point9_EffortDescription,
	#TempIYGradeEnrolment.Point10_EffortDescription,
	#TempIYGradeEnrolment.Point11_EffortDescription,
	#TempIYGradeEnrolment.Point12_EffortDescription

INTO #TempMain

FROM Student 
	LEFT JOIN  #TempQOEPointsGCSEOnly
	ON Student.ID = #TempQOEPointsGCSEOnly.ID
		LEFT JOIN #TempQOEPointsAll
		ON Student.ID = #TempQOEPointsAll.ID
			INNER JOIN Enrolment 
			ON Student.ID = Enrolment.StudentID
				INNER JOIN #TempEnrolment	
				ON Enrolment.ID = #TempEnrolment.ID
					LEFT JOIN LearningAim 
					ON LearningAim.LearningAimRef = Enrolment.LearningAimRef
					LEFT JOIN QAN
					ON QAN.LearningAimRef = Enrolment.LearningAimRef
						INNER JOIN QualificationLookup 
						ON QualificationLookup.ID = Enrolment.QualificationID
							INNER JOIN CohortLookup 
							ON QualificationLookup.CohortID = CohortLookup.ID
								INNER JOIN QualificationCodeLookup
								ON QualificationCodeLookup.ID = QualificationLookup.QualificationCodeID
								LEFT JOIN L3VAStudent 
								ON L3VAStudent.AcademicYearID = Enrolment.AcademicYearID
								AND L3VAStudent.Qualification = QualificationLookup.WholeQualID
								AND L3VAStudent.StudentID = Enrolment.StudentID
								LEFT JOIN Course
								ON Course.ID = Enrolment.CourseID
								LEFT JOIN Ethnicity
								ON Ethnicity.ID = Student.EthnicityID
								LEFT JOIN LLDDandHealthProblem
								ON LLDDandHealthProblem.ID = Student.LLDDandHealthProblemID
								LEFT JOIN #TempIYGradeEnrolment
								ON #TempEnrolment.ID = #TempIYGradeEnrolment.ID
								--LEFT JOIN InYearGrade
								--ON Enrolment.StudentID = InYearGrade.StudentID
								--AND Enrolment.AcademicYearID = InYearGrade.AcademicYearID
								--AND Enrolment.CourseID = InYearGrade.CourseID
WHERE 
	Enrolment.AcademicYearID = @AcademicYearID
	AND Enrolment.QualificationID IS NOT NULL --only pull those Enrolment records mapped to a CA Learning Aim
	AND LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) = 0 --if CA Learning Aim is mapped, do not include recs!


-----------------------------------------------------------------------------------------
--V1.30 - find any Targets set for a "frozen" year. If we find any, then use them here.--
-----------------------------------------------------------------------------------------
--SELECT * FROM #TempEnrolment WHERE ID IN (119147, 119150, 119159, 186304)
--DECLARE @AcademicYearID VARCHAR(5)
--DECLARE @AcademicYearNo INTEGER
--SELECT @AcademicYearID = '18/19'
--SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID
CREATE TABLE #TempEnrolmentFrozenTargets (ID INTEGER NOT NULL, MostRecentCollegeEstGrade VARCHAR(10) NULL, MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL, AcademicYearID VARCHAR(5) NULL)

--A list of students and LearningAims who have a frozen Target grade in the year before this...
SELECT StudentRef, T2.AcademicYearID, T2.LearningAimRef
INTO #TempStudentsWithFrozenGrades_LA
FROM
(
		SELECT T.StudentRef, T.LearningAimRef, T.AcademicYearID
		, row_number() OVER(PARTITION BY T.StudentRef, T.LearningAimRef ORDER BY MIN(T.AcademicYearNo) ASC) AS rn
		FROM 
		(
			SELECT DISTINCT Enrolment.StudentRef, Enrolment.LearningAimRef, Enrolment.AcademicYearID, (SELECT AcademicYearNo FROM AcademicYear WHERE AcademicYearID = Enrolment.AcademicYearID) AS AcademicYearNo
			FROM
				(SELECT Enrolment.ID
				FROM Enrolment
					INNER JOIN FreezeTargetGradeForFutureYears
					ON FreezeTargetGradeForFutureYears.StudentRef = Enrolment.StudentRef
					AND FreezeTargetGradeForFutureYears.AcademicYearID = Enrolment.AcademicYearID
					AND FreezeTargetGradeForFutureYears.LearningAimRef = Enrolment.LearningAimRef
						INNER JOIN AcademicYear ON FreezeTargetGradeForFutureYears.AcademicYearID = AcademicYear.AcademicYearID
						AND AcademicYear.AcademicYearNo < @AcademicYearNo
						--AND Enrolment.StudentRef = '30134455'
						AND Enrolment.StudentRef IN (SELECT DISTINCT StudentRef FROM Enrolment INNER JOIN #TempEnrolment ON Enrolment.ID = #TempEnrolment.ID)
				) Frozen
			INNER JOIN Enrolment ON Frozen.ID = Enrolment.ID
		) T
		INNER JOIN Enrolment ON Enrolment.StudentRef = T.StudentRef
		
		GROUP BY T.StudentRef, T.AcademicYearID, T.LearningAimRef
) T2
WHERE T2.rn = 1

--Now we know the frozen records, we need the target grades from the EstActVA table
SELECT DISTINCT
	#TempStudentsWithFrozenGrades_LA.StudentRef, #TempStudentsWithFrozenGrades_LA.AcademicYearID, #TempStudentsWithFrozenGrades_LA.LearningAimRef,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstPoints, EstActVA.MostRecentCollegeEstGradeInflated
INTO
	#TempStudentsWithFrozenGrades_WithTargets_LA
FROM
	EstActVA
		INNER JOIN #TempStudentsWithFrozenGrades_LA
		ON EstActVA.StudentRef = #TempStudentsWithFrozenGrades_LA.StudentRef
		AND EstActVA.LearningAimRef = #TempStudentsWithFrozenGrades_LA.LearningAimRef
		AND EstActVA.AcademicYearID = #TempStudentsWithFrozenGrades_LA.AcademicYearID

--Now we know the target grades from the frozen records, pull these frozen target grades from the previous years in EstActVA and apply them to the current year
INSERT #TempEnrolmentFrozenTargets (ID, MostRecentCollegeEstGrade, MostRecentCollegeEstPoints, MostRecentCollegeEstGradeInflated, AcademicYearID)
SELECT 
	Enrolment.ID, #TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGrade,
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstPoints, 
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGradeInflated,
	#TempStudentsWithFrozenGrades_WithTargets_LA.AcademicYearID
FROM
	Enrolment
		INNER JOIN #TempStudentsWithFrozenGrades_WithTargets_LA
		ON Enrolment.StudentRef = #TempStudentsWithFrozenGrades_WithTargets_LA.StudentRef
			INNER JOIN Course
			ON Course.ID = Enrolment.CourseID
			AND #TempStudentsWithFrozenGrades_WithTargets_LA.LearningAimRef = Enrolment.LearningAimRef
			AND Enrolment.AcademicYearID = @AcademicYearID




----Get the MostRecentPoints into a Temp table 
--SELECT
--	#TempMain.ID,
--	(CASE WHEN #TempMain.EstPoints_AcYrMin1 IS NULL THEN 
--		(CASE WHEN #TempMain.EstPoints_AcYrMin2 IS NULL THEN 
--			#TempMain.EstPoints_AcYrMin3
--		ELSE  
--			#TempMain.EstPoints_AcYrMin2
--		END) 
--	ELSE  
--		EstPoints_AcYrMin1
--	END) AS MostRecentCollegeEstPoints
--INTO 
--	#TempMostRecentCollegeEstPoints
--FROM 
--	#TempMain


--Get the MostRecentPoints into a Temp table 
CREATE TABLE #TempMostRecentCollegeEstPoints (ID INTEGER NOT NULL,  MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL)

INSERT #TempMostRecentCollegeEstPoints (ID, MostRecentCollegeEstPoints, MostRecentCollegeEstGradeInflated)
SELECT
	#TempMain.ID,
	(CASE WHEN #TempMain.EstPoints_AcYrMin1 IS NULL THEN 
		(CASE WHEN #TempMain.EstPoints_AcYrMin2 IS NULL THEN 
			#TempMain.EstPoints_AcYrMin3
		ELSE  
			#TempMain.EstPoints_AcYrMin2
		END) 
	ELSE  
		EstPoints_AcYrMin1
	END) AS MostRecentCollegeEstPoints,

	NULL AS MostRecentCollegeEstGradeInflated
FROM 
	#TempMain

--------------------------------------------------------------------------------------------------------------------------------
-- v1.30 Now we have the frozen target data in the #TempEnrolmentFrozenTargets table, populate #TempMostRecentCollegeEstPoints--
--------------------------------------------------------------------------------------------------------------------------------
--Substitute the MostRecentPoints with the Frozen MostRecentPoints held in #TempEnrolmentFrozenTargets
UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints = #TempEnrolmentFrozenTargets.MostRecentCollegeEstPoints
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID

UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated = ISNULL(#TempEnrolmentFrozenTargets.MostRecentCollegeEstGradeInflated,'')
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID


--This is the start of getting the Most Recent InYear Grade / Points in...
--v1.32.  A CASE statement can only be nested 10 levels deep, therefore here, we only go 10 levels deep.
--and place the values into #TempMostRecentInYearPointsGrades_1.  Then, in the next section, populate #TempMostRecentInYearPointsGrades
--by going 2 levels deeper again!
SELECT 
	#TempMain.ID,
	#TempMain.Point2_Grade,
	#TempMain.Point1_Grade,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Grade
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Grade 
										--	ELSE #TempMain.Point2_Grade END)
										--ELSE #TempMain.Point3_Grade END)
									ELSE #TempMain.Point4_Grade END)
								ELSE #TempMain.Point5_Grade END)
							ELSE #TempMain.Point6_Grade END)
						ELSE #TempMain.Point7_Grade END)
					ELSE #TempMain.Point8_Grade END) 
				ELSE #TempMain.Point9_Grade END)
			ELSE #TempMain.Point10_Grade END)
		ELSE #TempMain.Point11_Grade END)
	ELSE #TempMain.Point12_Grade END) 
	AS IYMostRecentGrade,

	#TempMain.Point2_Points,
	#TempMain.Point1_Points,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Points
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Points 
										--	ELSE #TempMain.Point2_Points END)
										--ELSE #TempMain.Point3_Points END)
									ELSE #TempMain.Point4_Points END) 
								ELSE #TempMain.Point5_Points END)
							ELSE #TempMain.Point6_Points END)
						ELSE #TempMain.Point7_Points END)
					ELSE #TempMain.Point8_Points END)
				ELSE #TempMain.Point9_Points END)
			ELSE #TempMain.Point10_Points END)
		ELSE #TempMain.Point11_Points END)
	ELSE #TempMain.Point12_Points END) 
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										'Pt.3'
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		(CASE WHEN ISNULL(#TempMain.Point1_Grade,'') = '' THEN
										--			'' 
										--		ELSE 'Pt.1' END)
										--	ELSE 'Pt.2' END)
										--ELSE 'Pt.3' END)
									ELSE 'Pt.4' END)
								ELSE 'Pt.5' END)
							ELSE 'Pt.6' END)
						ELSE 'Pt.7' END)
					ELSE 'Pt.8' END)
				ELSE 'Pt.9' END)
			ELSE 'Pt.10' END)
		ELSE 'Pt.11' END)
	ELSE 'Pt.12' END) 
	AS IYMostRecentPoint
INTO			
	#TempMostRecentInYearPointsGrades_1
FROM
	#TempMain
	

SELECT 
#TempMostRecentInYearPointsGrades_1.ID,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Grade 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Grade END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentGrade END)
	AS IYMostRecentGrade,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Points 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Points END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoints END)
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point1_Grade,'') = '' THEN
				'' 
			ELSE 'Pt.1' END)
		ELSE 'Pt.2' END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoint END)
	AS IYMostRecentPoint

INTO
#TempMostRecentInYearPointsGrades
FROM
#TempMostRecentInYearPointsGrades_1

--This last bit does a few calcs based upon the information pulled out from the Main part of the procedure.
--Doing it here at the end saves complication and duplication, so hopefully it is more efficient	

			--03/07/2023 AMG v1.35.0 This systemsetting decides if we use upper boundary to work out the Inflated grade.
			DECLARE @SystemSetting28 AS Bit
			SELECT @SystemSetting28 = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 28)
			
SELECT
	#TempMain.ID,
	#TempMain.AcademicYearID,
	#TempMain.StudentRef,
	#TempMain.Surname,
	#TempMain.Forenames,
	#TempMain.LearningAimRef,
	#TempMain.LearningAimTitle,
	#TempMain.QualificationDescription,
	#TempMain.WholeQualID,
	#TempMain.size,
	#TempMain.QualificationID,
	#TempMain.Duration,
	#TempMain.Cohort,
	CAST(#TempMain.QOEPoints_College AS DECIMAL(19,2)) AS QOEPoints_College2dp,
	CAST(#TempMain.QOEPoints_GCSE_College AS DECIMAL(19,2)) AS QOEPoints_GCSE_College2dp,
	CAST(#TempMain.QOEPoints_Final AS DECIMAL(19,2)) AS QOEPoints_Final2dp,
	CAST(#TempMain.QOEPoints_GCSE_Final AS DECIMAL(19,2)) AS QOEPoints_GCSE_Final2dp,
	CAST(#TempMain.EstPoints_AcYrMin3 AS DECIMAL(19,2)) AS EstPoints_AcYrMin32dp,
	CAST(#TempMain.EstPoints_AcYrMin2 AS DECIMAL(19,2)) AS EstPoints_AcYrMin22dp,
	CAST(#TempMain.EstPoints_AcYrMin1 AS DECIMAL(19,2)) AS EstPoints_AcYrMin12dp,
	
	CAST(#TempMain.EstPoints_L3VAStu AS DECIMAL(19,2)) AS EstPoints_L3VAStu2dp,
	CAST(#TempMain.ActPoints_L3VAStu AS DECIMAL(19,2)) AS ActPoints_L3VAStu2dp,
	CAST(#TempMain.VAScore_L3VAStu AS DECIMAL(19,2)) AS VAScore_L3VAStu2dp,
	
	CASE #TempMain.AcademicYearID WHEN '17/18' THEN 'EstPoints_AcYrMin2'
	ELSE
		CASE Duration	WHEN 1 THEN 'EstPoints_AcYrMin2'
						ELSE 'EstPoints_AcYrMin3' --changed from 'WHEN 2 THEN' to ELSE
		END
	END AS HighlightPurple,
	
	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3)
	) AS EstGrade_AcYrMin3,

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) 
	) AS EstGrade_AcYrMin2,

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1)
	) AS EstGrade_AcYrMin1,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYrMin3), GradeBoundaryInflation) 
		) 
	ELSE --normal
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3), GradeBoundaryInflation) 
		) 
	END
	AS EstGradeInflated_AcYrMin3,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYrMin2), GradeBoundaryInflation) 
		) 
	ELSE--normal
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2), GradeBoundaryInflation) 
		) 
	END
	AS EstGradeInflated_AcYrMin2,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYrMin1), GradeBoundaryInflation) 
		) 
	ELSE--normal
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1), GradeBoundaryInflation) 
		) 
	END
	AS EstGradeInflated_AcYrMin1,

	--most recent estimated college grade - if 1 is null, choose 2 if 2 is null choose 3...
	--(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) IS NULL THEN 
	--	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3) 
	--	ELSE  
	--	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2)
	--	END) 
	--ELSE  
	--dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) 
	--END) AS MostRecentCollegeEstGrade,

	--simplified v1.30:
	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)
	) 	AS MostRecentCollegeEstGrade,

	----most recent estimated college grade (Inflated)- if 1 is null, choose 2 if 2 is null choose 3...
	--(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) IS NULL THEN 
	--	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3) , GradeBoundaryInflation)
	--	ELSE  
	--	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) , GradeBoundaryInflation)
	--	END) 
	--ELSE  
	--dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) , GradeBoundaryInflation) 
	--END) AS MostRecentCollegeEstGradeInflated,

	--simplified v1.30:  If the Inflated Grade is NULL, in #TempMostRecentCollegeEstPoints, then it is not to be overwritten by a frozen grade
	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(CASE WHEN #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated IS NULL 
		THEN
			(SELECT 
			dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) , GradeBoundaryInflation) 
			) 
		ELSE #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated END) 
	ELSE
			(CASE WHEN #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated IS NULL 
		THEN
			(SELECT 
			dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) , GradeBoundaryInflation) 
			) 
		ELSE #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated END) 
	END
	AS MostRecentCollegeEstGradeInflated,

	Null AS Blank, --This is intentional because it is used by the Target Export routine.

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_L3VAStu)
	) AS EstGrade_L3VAStu,

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, ActPoints_L3VAStu)
	) AS ActGrade_L3VAStu,

		CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / 10 AS DECIMAL(19,2)) --It is 2 or more years
		END 
	AS VAScore_vs_Orig2dp,

		CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
		END
	AS VAScore_vs_Adj2dp,
	
	CASE Duration	WHEN 1 THEN (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN 'EstPoints_AcYrMin2' ELSE 'EstPoints_AcYrMin1' END)
					ELSE (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN 'EstPoints_AcYrMin3' ELSE 'EstPoints_AcYrMin2' END) ELSE 'EstPoints_AcYrMin1' END) --It is 2 or more years
	END AS HighlightYellow,

	CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / 10
						ELSE ((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / 10  --It is 2 or more years
	END AS VAScore_vs_Orig,

		CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
						ELSE ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
		END
	AS VAScore_vs_Adj,

	CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / 10 AS DECIMAL(19,2)) --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig2dp,

		CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / 10 AS DECIMAL(19,2)) --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj2dp,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / 10
						ELSE ((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / 10 --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
						ELSE ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj,


	((#TempMain.VAScore_L3VAStu) / Size)/ 10 AS VAScore_L3VAStu,
	#TempMain.QOEPoints_College,
	CAST(#TempMain.QOEPoints_GCSE_College AS DECIMAL(19,14)) AS QOEPoints_GCSE_College,
	--#TempMain.QOEPoints_GCSE_College,
	#TempMain.QOEPoints_Final,
	#TempMain.QOEPoints_GCSE_Final,

	#TempMain.EstPoints_AcYrMin3,
	#TempMain.EstPoints_AcYrMin2,
	#TempMain.EstPoints_AcYrMin1,
	#TempMain.EstPoints_L3VAStu,
	#TempMain.ActPoints_L3VAStu,

	--All the available Enrolment Fields:
	StartDate,
	PlannedEndDate,
	ActualEndDate,
	CompletionID,
	EnrolmentGrade,
	EnrolmentPoints,
	EnrolmentUserDefinedString1,
	EnrolmentUserDefinedString2,
	EnrolmentUserDefinedString3,
	EnrolmentUserDefinedString4,
	EnrolmentUserDefinedNumber,
	EnrolmentUserDefinedDate,
	CourseCode,
	CourseTitle,
	--All the available Student Fields:
	DOB,
	EthnicityCode,
	EthnicityDefinition,
	EthnicityCode + ' - ' + ISNULL(EthnicityDefinition,'') AS Ethnicity, --** 7/7/17 Added
	Gender,
	TutorGroupCode,
	StudentUserDefinedString1,
	StudentUserDefinedString2,
	StudentUserDefinedString3,
	StudentUserDefinedString4,
	StudentUserDefinedNumber,
	StudentUserDefinedDate,
	LLDDandHealthProblemCode,
	LLDDandHealthProblemDefinition,
	LLDDandHealthProblemCode + ' - ' + ISNULL(LLDDandHealthProblemDefinition,'') AS LLDDandHealthProblem, --** 7/7/17 Added
	FreeSchoolMeal,
	(SELECT Completion.[Description] FROM Completion WHERE CompletionID = Completion.ID) AS CompletionDescription,
	Qualification, --**7/7/17 Added
	QualificationCodeandName, --** 7/7/17 Added
	ISNULL(SubjectCode,'') + ' - ' + ISNULL(SubjectName,'') AS SubjectCodeandName, --** 7/7/17 Added
	Point1_Grade,
	Point2_Grade,
	Point3_Grade,
	Point4_Grade,
	Point1_Points,
	Point2_Points,
	Point3_Points,
	Point4_Points,

	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE  CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point1_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point1_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN CAST(((Point2_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point2_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point3_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point3_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point4_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point4_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST((((Point1_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((Point1_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point1_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST((((Point2_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN (((Point2_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point2_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST((((Point3_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((Point3_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point3_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST((((Point4_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((Point4_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point4_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig,
	
	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point1_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point2_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point3_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point4_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point1_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point2_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point3_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point4_vs_Adj,

	AgeOn31Aug,
	
	--The new fields needed now that CA is included:
	NULL AS CA_LearningAimTitle, --CA Equiv of Qualif Desc
	NULL AS CA_LearningAimRef, --CA Equiv of WholeQualID
	#TempMain.AB AS AB, 
	#TempMain.DC AS DC, 
	#TempMain.ABAcronym AS ABAcronym,
	#TempMain.DCName AS DCName,
	#TempMain.DCType AS DCType,
	'L3VA' AS VA_Type,
	ISNULL(MinGrade,'') + '-' + ISNULL(MaxGrade,'') AS GradeRange,
	--Added so we can work out the census point for w/d enrols
	CASE #TempMain.CompletionID WHEN '3' THEN DATEDIFF(dd, #TempMain.StartDate, #TempMain.ActualEndDate) ELSE NULL END AS WDNumDaysAfterStart, --Only show days for Withdrawn status
	--Added so we can show the current ac yr stats
	/*NEW*/	CAST(#TempMain.EstPoints_AcYr AS DECIMAL(19,2)) AS EstPoints_AcYr2dp,
	/*NEW*/	#TempMain.EstPoints_AcYr AS EstPoints_AcYr,
	/*NEW*/(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYr)
	) AS EstGrade_AcYr,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
	/*NEW*/(SELECT 	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYr), GradeBoundaryInflation))
	ELSE
	/*NEW*/(SELECT 	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYr), GradeBoundaryInflation)) 
	END
	AS EstGradeInflated_AcYr,

	/*NEW*/CAST(((ActPoints_L3VAStu - EstPoints_AcYr) / Size) /10 AS DECIMAL(19,2)) AS VAScore_vs_AcYr2dp,
	/*NEW*/ ((ActPoints_L3VAStu - EstPoints_AcYr) / Size)/ 10 AS VAScore_vs_AcYr,
	/*NEW*/ CAST(((EnrolmentPoints - EstPoints_AcYr) / Size) /10  AS DECIMAL(19,2))	AS EnrolmentGradeVAScore_vs_AcYr2dp,
	/*NEW*/ ((EnrolmentPoints - EstPoints_AcYr) / Size) / 10 AS EnrolmentGradeVAScore_vs_AcYr,
	#TempMain.AcademicYearID AS StudentAcYrID,
	--CASE (SELECT ID FROM QualificationLearningAim QLA WHERE #TempMain.LearningAimRef = QLA.LearningAimRef AND #TempMain.AcademicYearID = QLA.AcademicYearID) 	WHEN NULL THEN 'No' ELSE 'Yes' END AS InScope,
	CASE WHEN #TempMain.Cohort = 'Applied general' THEN
		CASE WHEN ISNULL((SELECT ID FROM AppliedGeneral_Scope S WHERE #TempMain.LearningAimRef = S.LearningAimRef AND #TempMain.AcademicYearID = S.AcademicYearID),0) >0 THEN 'Yes' ELSE 'No'END
	ELSE 'Yes' END AS InScope,
	'Yes' AS IsGraded,
	#TempMain.EnrolmentID,
	CASE WHEN #TempMain.LearningAimRef IN (SELECT LearningAimRef FROM QualificationLearningAimCollege UNION SELECT LearningAimRef FROM QualificationLearningAimCourseCollege) THEN 'Yes' ELSE 'No' END AS CollegeMapped,
	
	CAST(#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints AS DECIMAL(19,2)) AS MostRecentCollegeEstPoints2dp,
	#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints,
	CAST(((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS VAScore_vs_MostRecent2dp,
	(((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS VAScore_vs_MostRecent,
	CAST(((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS EnrolmentGradeVAScore_vs_MostRecent2dp,
	(((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS EnrolmentGradeVAScore_vs_MostRecent,
	
	CAST(((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point1_vs_MostRecent2dp,
	(((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point1_vs_MostRecent,
	CAST(((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point2_vs_MostRecent2dp,
	(((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point2_vs_MostRecent,
	CAST(((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS Point3_vs_MostRecent2dp,
	(((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point3_vs_MostRecent,
	CAST(((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS Point4_vs_MostRecent2dp,
	(((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point4_vs_MostRecent,

	--Most recent InYear Grade fields
	#TempMostRecentInYearPointsGrades.IYMostRecentGrade,
	#TempMostRecentInYearPointsGrades.IYMostRecentPoints,
	
	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE  CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST((((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig,

	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS IYMostRecent_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS IYMostRecent_vs_Adj,

	CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS IYMostRecent_vs_RecentTarget2dp,
	(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) AS IYMostRecent_vs_RecentTarget,
	IYMostRecentPoint, --the most recent IY Point (e.g. Pt.1, Pt.2)
	#TempMain.MappingInfo,
	NULL AS CA_QualTypeID,
	NULL AS CA_QualTypeDescription,
	#TempMain.TeachingGroupCode,
	StudentUserDefinedString5,
	StudentUserDefinedString6,
	StudentUserDefinedString7,
	StudentUserDefinedString8,
	StudentUserDefinedNumber2,
	EnrolmentUserDefinedString5,
	EnrolmentUserDefinedString6,
	EnrolmentUserDefinedString7,
	EnrolmentUserDefinedString8,
	EnrolmentUserDefinedNumber2,
	CourseUserDefinedString1,
	CourseUserDefinedString2,
	CourseUserDefinedString3,
	CourseUserDefinedString4,

	Point5_Grade,
	Point6_Grade,
	Point7_Grade,
	Point8_Grade,
	Point5_Points,
	Point6_Points,
	Point7_Points,
	Point8_Points,
	--Note AMG 01/07/2019 1.14.0 - Not going to include the Orig and Adj fields - it's overblown.
	--CASE Duration	WHEN 1 THEN CAST(((Point5_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point5_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point5_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point5_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point5_vs_Orig2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point6_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point6_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point6_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point6_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point6_vs_Orig2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point7_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point7_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point7_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point7_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point7_vs_Orig2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point8_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point8_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point8_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point8_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point8_vs_Orig2dp,
	--	CASE Duration	WHEN 1 THEN CAST(((Point5_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point5_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point5_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point5_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point5_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point6_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point6_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point6_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point6_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point6_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point7_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point7_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point7_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point7_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point7_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point8_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point8_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point8_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point8_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point8_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point5_vs_Adj2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point6_vs_Adj2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point7_vs_Adj2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point8_vs_Adj2dp,

	--CASE Duration	WHEN 1 THEN ((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point5_vs_Adj,
	--CASE Duration	WHEN 1 THEN ((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point6_vs_Adj,
	--CASE Duration	WHEN 1 THEN ((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point7_vs_Adj,
	--CASE Duration	WHEN 1 THEN ((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point8_vs_Adj,

	CAST(((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point5_vs_MostRecent2dp,
	(((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point5_vs_MostRecent,
	CAST(((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point6_vs_MostRecent2dp,
	(((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point6_vs_MostRecent,
	CAST(((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point7_vs_MostRecent2dp,
	(((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point7_vs_MostRecent,
	CAST(((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point8_vs_MostRecent2dp,
	(((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point8_vs_MostRecent,

	(SELECT LearningAim.NotionalNVQLevel FROM LearningAim WHERE LearningAim.LearningAimRef = #TempMain.LearningAimRef) AS NVQLevel,
	#TempMain.Point1_Notes, 
	#TempMain.Point2_Notes, 
	#TempMain.Point3_Notes, 
	#TempMain.Point4_Notes, 
	#TempMain.Point5_Notes, 
	#TempMain.Point6_Notes, 
	#TempMain.Point7_Notes, 
	#TempMain.Point8_Notes,
	NULL AS OfqualGradingScheme,
	#TempMain.MostRecentNationalDataYear,
	#TempMain.PersonalTargetGrade,
	#TempMain.OutcomeID,
	#TempMain.OutcomeDescription,
	#TempMain.TeachingGroupTitle,

	(SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) AS IYMostRecentGradeNo, --v1.28
	(SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) AS MostRecentCollegeEstGradeNo, --v1.28
	
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) > (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) THEN 1 ELSE 0 END AS MostRecentBelowTarget, --v1.28
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) < (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) THEN 1 ELSE 0 END AS MostRecentAboveTarget, --v1.28
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) = (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) THEN 1 ELSE 0 END AS MostRecentAtTarget, --v1.28

	#TempMain.Point1_EffortDescription,
	#TempMain.Point2_EffortDescription,
	#TempMain.Point3_EffortDescription,
	#TempMain.Point4_EffortDescription,
	#TempMain.Point5_EffortDescription,
	#TempMain.Point6_EffortDescription,
	#TempMain.Point7_EffortDescription,
	#TempMain.Point8_EffortDescription,
	(SELECT AcademicYearID FROM #TempEnrolmentFrozenTargets WHERE #TempEnrolmentFrozenTargets.ID = #TempMain.ID) AS TargetFrozenAcademicYearID,
	Point9_Grade,
	Point10_Grade,
	Point11_Grade,
	Point12_Grade,
	Point9_Points,
	Point10_Points,
	Point11_Points,
	Point12_Points,
	CAST(((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point9_vs_MostRecent2dp,
	(((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point9_vs_MostRecent,
	CAST(((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point10_vs_MostRecent2dp,
	(((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point10_vs_MostRecent,
	CAST(((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point11_vs_MostRecent2dp,
	(((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point11_vs_MostRecent,
	CAST(((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point12_vs_MostRecent2dp,
	(((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point12_vs_MostRecent,
	#TempMain.Point9_Notes, 
	#TempMain.Point10_Notes, 
	#TempMain.Point11_Notes, 
	#TempMain.Point12_Notes,
	#TempMain.Point9_EffortDescription,
	#TempMain.Point10_EffortDescription,
	#TempMain.Point11_EffortDescription,
	#TempMain.Point12_EffortDescription,

	--get the national data for the most recent academic year in the nationalprogress table (IY points against target grade)
	CASE WHEN (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) = 0 THEN 'Avg'
	ELSE
	(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) >= NationalProgress.LowerLimit 
							AND (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempMain.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
	)
	END AS IYMostRecent_vs_RecentTarget_NationalBanding,
	--get the national data for the most recent academic year in the nationalprogress table (Actual Grade against target grade)
	CASE WHEN (((#TempMain.EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) = 0 THEN 'Avg'
	ELSE
	(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE (((#TempMain.EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) >= NationalProgress.LowerLimit 
							AND (((#TempMain.EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempMain.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
	)
	END AS EnrolmentGradeVAScore_vs_MostRecent_NationalBanding,

	(SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) AS EnrolmentGradeNo, --v1.34
	
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) < (SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) THEN 1 ELSE 0 END AS EnrolmentGradeBelowTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) > (SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) THEN 1 ELSE 0 END AS EnrolmentGradeAboveTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) = (SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) THEN 1 ELSE 0 END AS EnrolmentGradeAtTarget, --v1.34

	(SELECT Count(vStudentEntryLearningAim.EntryLearningAimRef) 
	FROM vStudentEntryLearningAim 
	INNER JOIN EntryLearningAim ON vStudentEntryLearningAim.EntryLearningAimRef = EntryLearningAim.EntryLearningAimRef
	INNER JOIN EntryLearningAimType ON EntryLearningAim.EntryLearningAimTypeID = EntryLearningAimType.ID
	INNER JOIN EntryLearningAimTypeGrade ON EntryLearningAimType.ID = EntryLearningAimTypeGrade.EntryLearningAimTypeID
	WHERE vStudentEntryLearningAim.Grade = LTRIM(RTRIM(EntryLearningAimTypeGrade.Grade))
	AND EntryLearningAimType.IsObsolete = 0
	AND vStudentEntryLearningAim.StudentID = #TempMain.StudentID
	) AS CountOfMappedQOE--v1.36

	, (SELECT #Temp_Enrol_CollegeStructure.CollegeStructure FROM #Temp_Enrol_CollegeStructure WHERE #Temp_Enrol_CollegeStructure.ID = #TempMain.ID) AS CollegeStructure --v1.36

FROM
	#TempMain
	LEFT JOIN #TempMostRecentCollegeEstPoints
	ON #TempMain.ID = #TempMostRecentCollegeEstPoints.ID
	LEFT JOIN #TempMostRecentInYearPointsGrades
	ON #TempMain.ID = #TempMostRecentInYearPointsGrades.ID




GO


--Change the EstActVA fields StudentUserDefinedNumber and EnrolmentUserDefinedNumber into DECIMAL(19,2) from VARCHAR(30)

--Set fields to null that are empty strings
UPDATE EstActVA SET StudentUserDefinedNumber = NULL FROM EstActVA WHERE LEN( LTRIM(RTRIM(StudentUserDefinedNumber)) ) = 0
UPDATE EstActVA SET EnrolmentUserDefinedNumber = NULL FROM EstActVA WHERE LEN( LTRIM(RTRIM(EnrolmentUserDefinedNumber)) ) = 0

--now find any fields that have non-numeric values
SELECT ID, StudentUserDefinedNumber INTO #TempSUDFNumNoNumeric FROM EstActVA WHERE ISNUMERIC(LTRIM(RTRIM(StudentUserDefinedNumber))) = 0 AND StudentUserDefinedNumber IS NOT NULL
SELECT ID, EnrolmentUserDefinedNumber INTO #TempEUDFNumNoNumeric FROM EstActVA WHERE ISNUMERIC(LTRIM(RTRIM(EnrolmentUserDefinedNumber))) = 0 AND EnrolmentUserDefinedNumber IS NOT NULL

--now set the field to be decimal:
UPDATE EstActVA SET StudentUserDefinedNumber = NULL
FROM EstActVA INNER JOIN #TempSUDFNumNoNumeric
ON EstActVA.ID = #TempSUDFNumNoNumeric.ID

UPDATE EstActVA SET EnrolmentUserDefinedNumber = NULL
FROM EstActVA INNER JOIN #TempEUDFNumNoNumeric
ON EstActVA.ID = #TempEUDFNumNoNumeric.ID

GO


--now we know it is safe to do so, set the fields to be numeric:

IF (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'EstActVA' AND COLUMN_NAME = 'StudentUserDefinedNumber' AND DATA_TYPE = 'varchar') >= 1
BEGIN
	ALTER TABLE EstActVA ALTER COLUMN StudentUserDefinedNumber DECIMAL(19,2) NULL
END

GO


IF (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'EstActVA' AND COLUMN_NAME = 'EnrolmentUserDefinedNumber' AND DATA_TYPE = 'varchar') >= 1
BEGIN
	ALTER TABLE EstActVA ALTER COLUMN EnrolmentUserDefinedNumber DECIMAL(19,2) NULL
END

GO



